java、JSP web項目中的路徑問題

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爲基準的。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章