Web開發路徑問題小結
一、Web開發中路徑的幾個基本概念
假設在瀏覽器中訪問了如下的頁面,如圖1所示:
img01.png
Eclipse中目錄結構如圖2所示:
img02.png
那么針對這個站點的幾個基本概念表述如下:
1. web服務器的根目錄:http://localhost:8080/
2. web應用程序的的根目錄:http://localhost:8080/test/
3. 同級目錄:http://localhost:8080/test/articles/article1.jsp和http://localhost:8080/test/articles/article2.jsp 就是處于同級目錄。
二、幾個路徑相關函數的返回值:
在TestURL.jsp文件中測試了三個路徑相關函數:
1. getRequestURI() : 返回Web服務器根目錄 后的路徑
2. getContextPath() : 返回當前應用程序(項目)的路徑名
3. getServletPath() : 返回當前項目名后的路徑
結果如圖3所示:
img03.png
三、web.xml中的路徑
Servlet 映射 <url-pattern>/xx</url-pattern> 中的 “/” 代表當前 web 應用的根路徑。
這個只要思考一下就能得出結論:所有的web.xml文件都是描述某個web應用的部署相關信。
所以“/”只能代表當前 web 應用的根路徑,而不是指向web服務器的根目錄
四、轉發和重定向中的路徑問題
1:如果路徑中沒有以“/”開頭,重定向和請求轉發結果一樣:就表示在同級目錄中尋找login.jsp文件。
如 : request.getRequestDispatcher("hello.jsp ").forward(request, response)
和 response.sendRedirect(" hello.jsp ")
2. 如果路徑中以“/”開頭,重定向和請求轉發就有區別了。
a, 轉發
如request.getRequestDispatcher("/hello.jsp").forward(request, response) :
代表到http://localhost:8080/test/ 下目錄尋找hello.jsp文件。
b,重定向
如response.sendRedirect("/hello.jsp"):
代表到http://localhost:8080/ 目錄下尋找hello.jsp文件
理解:告訴客戶端重定向發送請求訪問hello.jsp頁面,因此是在Web服務器根目錄下尋找。
五、<form action=“/xxx”> 或 <a href=“/xxx”></a>中的路徑
如果不以"/"開頭,代表的是當前應用的根路徑下尋找。
“/”代表的是 web 服務器的根路徑下尋找。
因為超鏈接可以鏈接到任何需要的目標資源, 所以 / 代表的肯定不是當前 web 應用的根路徑,
而是當前 web 服務器的根路徑。
六、Page標簽中errorPage屬性的路徑問題
errorPage屬性值如果以”/”開頭表示,表示相對于當前WEB應用程序的根目錄,
否則,表示相對與當前頁面。