JavaWeb 專案中的絕對路徑和相對路徑以及問題的解決方案

jsjliuyun發表於2014-07-17

最近在做JavaWeb專案,總是出現各種的路徑錯誤,而且發現不同情況下 /  所代表的含義不同,導致在除錯路徑上浪費了大量時間。

在JavaWeb專案中儘量使用絕對路徑  因為使用絕對路徑是絕對不會出錯的,而使用相對路徑可能會出現錯誤。


首先 說下在JavaWeb專案中的絕對路徑和相對路徑的含義

絕對路徑: 相對於當前Web應用根路徑的路徑  也就是任何路徑都必須要帶上contextPath =  http://localhost:8080/WebProject/

相對路徑: 相對於當前目錄的路徑為相對路徑 通常直接用/ 來表示


因為使用相對路徑 中的 / 在JavaWeb中的含義在不同的情況下含義不同,所以使用相對路徑時可能會出現問題

下面就分析 / 在JavaWeb含義

JavaWeb專案中 /  的不同含義

JavaWeb專案中的 / 可能表示如下含義

當前Web應用的根路徑(也就是絕對路徑)  http://localhost:8080/WebProject/

有以下情況

> 請求轉發時  

request.getRequestDispatcher("/message/a.jsp").forward(request,response);
>  web.xml 檔案中對映Servlet 訪問路徑

 <servlet-mapping>
    <servlet-name>UserServlet</servlet-name>
    <url-pattern>/UserServlet</url-pattern>
  </servlet-mapping>

> 各種定製標籤中的 /


當前Web站點的根路徑  http://localhost:8080/

有以下情況

> 超連結

<a href=""></a>
> 表單中的action
<form action="" method="post"></form>
> 請求重定向的時候

response.sendRedirect("");


綜合上述情況,我們應該在web專案開發中使用絕對路徑也就是應該帶上contextPath

而contextPath可以由request.getContextPath 或者 application.getContextPath 來獲取


所以當遇到超連結  表單中的action 或者 請求重定向的時候,應該在其前面加上contextPath 而不能直接使用相對路徑 / 

為了保險起見,大家對專案中出現任何的訪問路徑,比如css 或者js程式碼的呼叫的路徑都可以使用絕對路徑來防止出現問題

相關文章