request.getcontextPath() 詳解

<%=request.getContextPath()%>是爲了解決相對路徑的問題,可返回站點的根路徑。
html

 但不用也能夠,好比<a href="<%=request.getContextPath()%>/catalog.jsp">,能夠直接用<a href="catalog.jsp">也行,這兩個文件是在同一個目錄下的。好比你要生成一個文件放在服務器上得一個目錄下,能夠使用request.getContextPath()+/dir,組成一個完整得目錄結構! web

 

但在JSP文件裏,有時經過request.getContextPath()獲得的路徑卻爲空,爲何? 瀏覽器

context中沒有配置path屬性,因此你的工程文件就是在根目錄下,至關於path=""; tomcat

便是你直接在瀏覽器中輸入你的服務器ip就會到你的jsp頁面,而不是tomcat的默認頁面;因此你經過request.getContextPath()獲得的字符串是爲空的;它是得到虛目錄的; 服務器

 

若是你想獲得工程文件的實際物理路徑,可經過:<%=request.getRealPath("/")%>,這樣頁面就會輸出:d:/web。參考servlet中的接口: app

 

request.getScheme();
返回的協議名稱,默認是http jsp

 

request.getServerName()
返回的是你瀏覽器中顯示的主機名,你本身試一下就知道了 測試

 

getServerPort()
獲取服務器端口號  spa

 

request.getContextPath()應該是獲得項目的名字,若是項目爲根目錄,則獲得一個"",即空的字條串。若是項目爲abc, <%=request.getContextPath()% > 將獲得abc,服務器端的路徑則會自動加上,<a href="XXXX.jsp"> 是指當前路徑下的這個xxx.jsp頁面,有時候也能夠在head裏設置html:base來解決路徑的問題,不過用的最多的仍是request.getContextPath。 htm

 

在js文件中獲得request.getContextPath()的值,不想在JSP中寫太多的Javascript代碼:

一種方法是用hidden:

<input type=hidden name=contextPath value=<%= request.getContextPath()>

 

 

再就是在本頁面的js裏面也是能夠使用Scriptlet來賦值的:
var a = '<%= request.getContextPath()>'


或者你賦值給一個hidden的控件都是能夠的,而後js取,這樣js能夠不用寫在jsp裏。

 

實際應用中,通常用來解決jsp測試和生產環境路徑不一樣的問題: 

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

相關文章
相關標籤/搜索