JSP中的路徑


我的原則

所有路徑一律使用絕對路徑,就是以"/"開頭的或者帶host的路徑。形如:

/imgs/1.jpg
<%= request.getContextPath()%>/imgs/1.jpg //推薦使用

應該盡量避免使用類似".","./","../../"等類似的相對該文件位置的相對路徑。一方面,這樣當文件移動時,很容易出問題。另一方面,絕對路徑用起來簡單。

相對路徑和絕對路徑

相對路徑(Relative Path)以引用文件的網頁所在位置為參考基礎,而建立出的目錄路徑。形如:

imgs/1.jpg;    ../imgs/1.jpg;     ./imgs/1.jpg

絕對路徑(absolute path)以Web 站點根目錄(形如:http://localhost:8080/)為參考基礎的目錄路徑。之所以稱為絕對,意指當所有網頁引用同一個文件時,所使用的路徑都是一樣的。形如:

http://localhost:8080/yourwebapp/index.jsp
/imgs/1.jpg

"." -- 代表目前所在的目錄,相對路徑。 如:<a href="./abc">文本</a> 或 <a href="abc">

".." -- 代表上一層目錄,相對路徑。 如:<a href="../abc">文本</a>

"../../" -- 代表的是上一層目錄的上一層目錄,相對路徑。 如:<img src="../../abc" />

"/" -- 代表根目錄,絕對路徑。 如:<a href="/abc">文本</a> 或 <img src="/abc" />

"D:/abc/" -- 代表根目錄,絕對路徑。

前端后台根目錄

前端——服務器的根目錄"/":所代表的路徑形如:

http://localhost:8080/ 

后台——Web應用的根目錄"/":所代表的路徑形如:

http://localhost:8080/yourwebapp/ 

前端地址(瀏覽器解析)

所有的html頁面中的絕對地址都是相對於host根目錄(http://localhost:8080/)的,是由瀏覽器解析。路徑前的"/"代表host根目錄。

注:host代表指定請求資源的Intenet主機和端口號

jsp頁面中html標簽如<a> <img><form>路徑前面的"/"代表(http://localhost:8080/)。

eg:

<form action="myaction"> //絕對URL地址是http://localhost:8080/yourwebapp/myaction 

注意這里是因為,后面講到的basePath。

<form action="<%=basePath%>myaction"> //絕對URL地址是http://localhost:8080/yourwebapp/myaction 
<form action="/myaction"> //絕對URL地址是http://localhost:8080/myaction //路徑錯誤 

服務器端地址(tomcat解析)

服務器端的絕對地址指的是相對於你的web應用的地址(http://localhost:8080/yourwebapp/),是由tomcat解析。在jsp和servlet中路徑前的"/"代表webapp的根目錄。

其用到的地方有:forward、url-pattern

servlet中request.getRequestDispatcher(address);假設你要forward到項目根目錄下的user目錄下a.jsp應該這么寫:

request.getRequestDispatcher("/user/a.jsp").forward(request, response);

這個"/"當前的web應用yourwebapp根目錄,其絕對URL地址就是:

http://localhost:8080/yourwebapp/user/a.jsp。 

然而sendRedirect中redirect是客戶端的行為,所以應該是以瀏覽器解析的方式來書寫url;

/yourwebapp/user/a.jsp

JSP頁面中的basePath

新建一個JSP頁面自動生成如下代碼:

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

說明:

path="/yourwebapp";//項目名 
basePath="http://localhost:8080/yourwebapp/";//host+項目名 

base標簽的href屬性規定頁面中所有相對鏈接的基准URL。解決了前面敘述的前后台路徑不統一的問題。

eg:

<a href="<%=path %>/counter/one.jsp">one.jsp</a>//注意path后面沒有"/",得加上。 

html頁面輸出為:

<a href="/yourwebapp/counter/one.jsp">one.jsp</a> 

因為有<base>標簽的存在,相對路徑會失效,例如:

<img src="imgs/1.jpg">

無論圖片所在的網頁在哪個目錄,在yourwebapp/目錄下,還是在yourwebapp/news/目錄也好。其瀏覽器解析出圖片的URL為:

http://localhost:8080/yourwebapp/imgs/1.jpg 

也就是說:所有前面不帶"/"或者host的路徑A,瀏覽器解析的URL為: basePath+A。

從而形成了前后台路徑使用的統一。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM