java web項目中的路徑,有相對路徑和絕對路徑
什麼是相對路徑呢 舉個簡單例子
我們有項目 test 發佈後地址 http://localhost:8080/test/
頁面 qiantai/login.jsp 頁面中鏈接 <a href="index.jsp" />
JSP頁面相相對尋址 鏈接的最終地址是 http://localhost:8080/Test/qiantai/index.jsp
相對路徑是這麼一個過程 首先取當前文件的路徑 也就是 http://localhost:8080/test/qiantai/
然後拼接鏈接的地址 index.jsp 所以結果就如上 ......qiantai/index.jsp
在CSS、JS的引用中爲防止後臺轉發造成的問題,應儘量使用絕度路徑
第一種方案
JSP頁面中自帶兩個路徑參數 path和basePath
頁面的開頭,有這麼一段代碼
<%
String path = request.getContextPath(); 獲得當前路徑 例如 http://localhost:8080/test/qiantai/
//獲得本項目的地址 例如 http://localhost:8080/test/ 賦值給 basePath
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
//將項目路徑 basePath 放入pageContext中,待以後用EL表達式讀出
pageContext.setAttribute("basePath",basePath);
%>
鏈接改用 <a href="${pageScope.basePath}qiantai/index.jsp">
從而構成一個絕對路徑 http://localhost:8080/test/qiantai/index.jsp
但是這樣做有一個很不好的地方,那就是我們必須要在每個鏈接的前面都要加上 “${pageScope.basePath}”
第二種方案
使用HTML中的base標籤(推薦使用)
對base的介紹:base 元素可規定頁面中所有鏈接的基準
URL默認情況下,頁面中的鏈接(包括樣式表、腳本和圖像的地址)都是相對於當前頁面的地址(即:瀏覽器地址欄裏的請求URL)。
我們可以使用 <base>標籤中的href屬性來設置,所有的“相對基準 URL”。
<head>
<!-- base需要放到head中 -->
<base href="http://localhost:8080/test/"> 或者 <base href="<%=basePath%>" />
</head>
這樣就可以直接使用相對路徑 <a href="index.jsp" />
設置了 <base>後,相對路徑,相對於的就是base中的路徑,而不再是瀏覽器地址的請求路徑啦~~~
我們可以看到JSP返回的html代碼中,包含了 <base href="http://localhost:8080/test/">內容
也就是說,在本html文件中,遇到的所有 “相對鏈接(例如: <a href="login.jsp">)”,都是相對於base
這樣就不用擔心轉發操作(forward)或 請求地址不同不同所造成的頁面無法找到的錯誤啦~(即: HTTP: 404)。。。
也可以很好的避免因轉發造成的css或js引用地址錯誤問題,以爲頁面的路徑都是以base爲基準的。