1. 程式人生 > >關於pageContext.request.contextPath和request.getContextPath()等路徑問題

關於pageContext.request.contextPath和request.getContextPath()等路徑問題

${pageContext.request.contextPath}和<%=request.getContextPath()%>等路徑問題

我們在寫jsp頁面的時候,經常見到下面幾個關於路徑的寫法: 比如

<%
	String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+
           request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/";
%

或:

<base href="<%=basePath%>" 

還有:

a href="${pageContext.request.contextPath}/static/doem.css 

如圖: 在這裡插入圖片描述

實際上,上面這個幾個都是在jsp裡面代表著路徑的寫法,相對路徑,絕對路徑。

聽我一一說來。

1. ${pageContext.request.contextPath}

${pageContext.request.contextPath}  

是jsp頁面中取得絕對路徑的方法,等價於

<%=request.getContextPath()%> 

二者達到是同樣的效果。

也就是有的人在jsp頂部經常寫: <% String path = request.getContextPath(); %> ,這是取得絕對路。

表示:取出部署的應用程式名 或者 是當前的專案名稱

舉例:

比如我的專案名稱是demo1。

那麼採用

${pageContext.request.contextPath}  

或 

<%=request.getContextPath()%> 

取出來的就是 /demo1 
而"/"代表的含義就是http://localhost:8080 
故有時候專案中這樣寫:

${pageContext.request.contextPath}/indx.jsp  或
<%=request.getContextPath()%>/index.jsp ,

訪問到的就是 http://localhost:8080/demo1/index.jsp 

2.一般頁面頂部都寫:

<%
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
/%>

這個語句是用來拼裝當前網頁的相對路徑的,

request.getSchema() 可以返回當前頁面使用的協議,就是上面例子中的“https”。 request.getServerName() 可以返回當前頁面所在的伺服器的名字,就是上面例子中的“localhost"。 request.getServerPort() 可以返回當前頁面所在的伺服器使用的埠,就是80。 request.getContextPath() 可以返回當前頁面所在的應用的名字,就是上面例子中的demo1。

3.最後:base .... .

<base href="<%=basePath%>">

這個一般和上面的basePath 搭配使用。

一般寫在jsp的title下面,

< base href="…"> 表明當前頁面的相對路徑所使用的根路徑的

demo1 是當前應用程式的名字,

那麼,我的根路徑應該是那麼http://localhost:80/demo1/

當你在頁面上寫了:<base … >以後,我的jsp頁面中凡是內容的連線,url,src,都可以不寫全路徑,只需要寫 authen/login.do 就可以訪問專案對應的url地址。

因為伺服器會自動把<base ...>指定的路徑和頁面內的相對路徑拼裝起來,組成完整路徑。

如果沒有這個<base...>,那麼我頁面的連連結就必須寫全路徑,否則伺服器會找不到。

這也是一些配置了tomcat虛擬路徑以後,上傳圖片。

寫上了慣用${pageContext.request.contextPath}/static/test.jpg 反而訪問不了圖片。
而直接寫static/test.jpg,卻可以看見圖片的原因。

4.補充一下

相對路徑 相對路徑固然比較靈活,但如果想複製頁面內的程式碼卻變得比較困難,因為不同的頁面具有不同的相對路徑,複製後必須修改每一個連線的路徑。如果頁面被多於一個的頁面所包含,那麼被包含頁面中的相對路徑將是不正確的。

絕對路徑 隨著不同的Web應用釋出方式,絕對路徑的值也不同。採用絕對路徑,但為了解決不同部署方式的差別。但是操作不便,其他工具無法正確解釋。