用Java開發Web應用時,無論是Jsp頁面、Servlet或是web.xml配置檔案中都涉及到路徑的問題,而這又是初學者較容易混淆的地方,往往不知道如何寫路徑。其實伺服器端和用戶端在處理路徑的方式上不一緻,是以需要根據不同的情況寫出正确的路徑。下面通過例子來說明。
假設Web應用road中,應用的根路徑下有一個dir1檔案夾和dir2檔案夾。c.jsp在dir1中,a.jsp和b.jsp在dir2中。Web應用的結構如圖所示。
+ root
-dir1
c.jsp
-dir2
a.jsp
b.jsp
- JSP頁面中正确的路徑表示假設在a.jsp頁面中有兩個連結,分别連結到b.jsp和c.jsp頁面。
- 直接寫路徑表示和頁面在同一個檔案夾下面,如<a href="b.jsp" target="_blank" rel="external nofollow" >b.jsp</a>
-
"../"表示目前檔案夾的上一級檔案夾(相對路徑),如: <a href="../dir2/b.jsp" target="_blank" rel="external nofollow" >b.jsp</a>,
<a href="../dir1/c.jsp" target="_blank" rel="external nofollow" >c.jsp</a>
-
"/"表示 http://機器IP:8080(絕對路徑),如: <a href="/road/dir2/b.jsp" target="_blank" rel="external nofollow" >b.jsp</a>
<a href="/road/dir1/c.jsp" target="_blank" rel="external nofollow" >c.jsp</a>
- Servlet中正确的路徑表示
-
轉發請求時:"/"表示“http://伺服器IP:8080/Web應用名”,例如: String forward = "/dir1/c.jsp";
RequestDispatcher rd = request.getQRequestDispatcher(forward);
-
重定向時:“/” 表示“http://機器IP:8080”,而通過request.getContextPath()得到的是:“http://機器IP:8080/Web應用名”,例如: String str = request.getContextPath();
response.sendRedirect(str + "/dir1/c.jsp");
-
- 配置檔案web.xml中 url-mapping中,"/"表示“http://IP位址:8080/Web應用名”
××總結××
- 在浏覽器端:“/”表示的是一台WEB伺服器,“http://機器IP:8080”
- 在伺服器端(請求轉發):“/”表示的是一個WEB伺服器端的應用,“http://機器IP:8080/Web應用”
- 在伺服器端(重定向):“/”表示的是一個WEB伺服器,“http://機器IP:8080”