getContextPath方法

request.getContextPath()作用詳解

開發的時候在jsp頁面遇到了如下代碼,這段代碼是做什麼用的呢,以下詳細解釋:

[html] view plain copy
 print?
  1. String path = request.getContextPath();  
  2. String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path;  
  3.       
  4. <span><base href=<span class="string">"<%=basePath%>"</span>  

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

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

        但在JSP文件裏,有時通過request.getContextPath()得到的路徑卻爲空,爲什麼?

        context中沒有配置path屬性,所以你的工程文件就是在根目錄下,相當於path="";

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

 

        如果你想得到工程文件的實際物理路徑,可通過:<%=request.getRealPath("/")%>,這樣頁面就會輸出:d:/web。

       ① request.getScheme()可以返回當前頁面使用的協議;默認返回http,SSL時返回https;

       ② request.getServerName()可以返回當前頁面所在的服務器的名字;

       ③request.getServerPort()可以返回當前頁面所在的服務器使用的端口,就是項目在服務器上發佈的 端口,或者在本地tomcat容器運行時發佈的端口,我用的是8081;

       ④request.getContextPath()可以返回當前頁面所在的應用的名字;


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

       總結一下以上代碼就是拼裝當前網頁的相對路徑的,<base href="...">是用來表明當前頁面的相對路徑所使用的根路徑的。
       比如,頁面內部有一個連接,完整的路徑應該是 http://localhost:80/myblog/authen/login.do
其中http://server/是服務器的基本路徑,myblog是當前應用程序的名字,那麼,我的根路徑應該是那麼http://localhost:80/myblog/。

       有了這個<base ... >以後,我的頁面內容的連接,我不想寫全路徑,我只要寫 authen/login.do就可以了。服務器會自動把<base ...>指定的路徑和頁面內的相對路徑拼裝起來,組成完整路徑。
如果沒有這個<base...>,那麼我頁面的連鏈接就必須寫全路徑,否則服務器會找不到。


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