一:servlet
可能經常我們需要在servlet中處理一些路徑問題,比如,想得到當前應用中某個檔案的實體路徑,或者需要知道某個請求的具體路徑,這時就需要用到這些方法了。
1:獲得web應用的物理絕對路徑
用到了getServletContext()中的getRealPath ()方法,它能夠返回當前web應用中的某個檔案的物理絕對路徑
String webRealPath=request.getSession().getServletContext().getRealPath("/");
這裡用“/”,返回的時web應用根目錄的實體路徑,比如我的web應用在本機上的存放位置是
C:/Eclipse/workspace/mynews/MyNews
|__WEB-INF
|___class
|___lib
C:/Eclipse/workspace/mynews/MyNews
2:當我在瀏覽器輸入以下請求路徑時http://localhost:8080/mynews/index.jsp
以下各個方法輸出結果如下:
request.getContextPath()輸出:
/mynews
獲得URI
request.getRequestURI()輸出:
/mynews/index.jsp
獲得URL
request.getRequestURL()輸出:
http://localhost:8080/mynews/index.jsp
知道了這幾個方法的不同,就很容易在程式中使用了
二:Jsp中的一些路徑問題
在jsp中可以使用相對路徑,所以很容易出現一些問題
比如我現在有名為path的一個web應用程式,其中的檔案組織圖如下:
web
|__WEB-INF
|__index.jsp
|__internal
|__internal.jsp
在index.jsp中,有如下串連<a href="internal/internal.jsp">link</a>點擊此串連後會連到如下地址:
http://localhost:8080/web/internal/internal.jsp,也就是說,上邊那個串連地址是相對於index.jsp來說的。
當把連結改為<a href="/internal/internal.jsp">link</a>就會發現連結地址變成了如下:
http://localhost:8080/internal/internal.jsp也就是說,當加上“/”時,就變成了相對於網站根目錄,而不是相對於web應用程式的根目錄。
同樣我們在internal.jsp中,我們可以使用../index.jsp來連結到index.jsp頁面。
以上原則也適用於在提交表單時action中的路徑問題,無論action轉向的是servlet還是jsp頁面。
END!