JavaWeb中的路徑問題
一、html中的路徑
1、無<base>
標籤
路徑前有/ | 路徑前無/ |
---|---|
此時的斜槓等同於端口號後的斜槓 | 此時以地址欄路徑爲基準 |
eg:action="/a.tml" <=>localhost:8080/a.html |
eg: action="a.html" <=>地址欄當前路徑下/a.html |
2、有<base>
標籤
<base>
標籤的用法
- 位置:必須位於
<head></head>
標籤內- 定義和用法:標籤爲頁面上的所有鏈接規定默認地址或默認目標。
通常情況下,瀏覽器會從當前文檔的 URL 中提取相應的元素來填寫相對 URL 中的空白。
使用 <base> 標籤可以改變這一點。瀏覽器隨後將不再使用當前文檔的 URL,而使用指定的基本 URL 來解析所有的相對 URL。這其中包括<a>、<img>、<link>、<form>、<link>
等標籤中的 URL。
屬性 | 值 | 描述 |
---|---|---|
href(必選項) | URL | 規定頁面中所有相對鏈接的基準 URL。 |
target(可選項) | _blank _parent _self _top framename |
在何處打開頁面的鏈接 |
eg:
<base href="http://localhost:8080/test/">//注意最後的斜槓一定要有
<base target="_blank">//表示在新的窗口中打開鏈接
路徑前有/ | 路徑前無/ |
---|---|
表示<base> 標籤中端口號後的/ |
表示在base標籤的基礎上 |
eg:<a href="/a.html"></a> <=>href="http://localhost:8080/a.html" |
eg:<action="a.html"> <=>action="http: //localhost:8080/test/a.html" |
二、Java中的路徑(與<base>
標籤無關)
類型 | 有/ | 無/ |
---|---|---|
重定向 | 表示端口號後的/ | 以地址欄路徑爲基準 |
轉發 | 表示部署名後的/ | 以地址欄路徑爲基準 |
eg:地址欄路徑爲:http://www.baidu.com:80/test/user/b.html (test爲項目部署名,可通過request.getContextPath獲取)
- 重定向
//此時重定向的路徑爲:http://www.baidu.com:80/test/user/a.html
response.sendRedirect("a.html");
//此時重定向的路徑爲:http://www.baidu.com:80/a.html
response.sendRedirect("/a.html");
- 轉發
//此時轉發的路徑爲:http://www.baidu.com:80/test/user/a.html
request.getRequestDispatcher("a.html").forward(req.resp);
//此時轉發的路徑爲:http://www.baidu.com:80/test/a.html
request.getRequestDispatcher("/a.html").forward(req.resp);
重定向地址欄改變,轉發地址欄不變。所以如果經過轉發後再使用相對地址就可能產生錯誤,導致404NOT FOUND。 因此一般書寫路徑時,都需以/開頭。html中需要base標籤。
限於作者水平有限,如發現錯誤還請大家在下方評論聯繫作者。