標籤:scheme down 檔案 index.jsp microsoft src 根目錄 服務 基本
jsp檔案裡通常有以下代碼:
這裡的<base href="<%=basePath%>">是什麼意思呢?
我在W3School網站上查了html中的base標籤,解釋如下:
<base> 標籤為頁面上的所有連結規定預設地址或預設目標。
通常情況下,瀏覽器會從當前文檔的 URL 中提取相應的元素來填寫相對 URL 中的空白。
使用 <base> 標籤可以改變這一點。瀏覽器隨後將不再使用當前文檔的 URL,而使用指定的基本 URL 來解析所有的相對 URL。這其中包括 <a>、<img>、<link>、<form> 標籤中的 URL。
注釋:<base> 標籤必須位於 head 元素內部。
在一篇網易部落格上看到了對於這個base語句的詳解,連結如下:
JSP分頁檔中的base標記 ,jerry
原文如下:
我們在用IDE工具產生JSP頁面時通常都包含下面的兩段代碼,
<%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><head><base href="<%=basePath%>"> </head>
它們絕對不是無用代碼,詳細如下:
base標記是一個基連結標記,是一個單標記。用以改變檔案中所有連結標記的參數內定值。它只能應用於標記<head>與</head>之間。你網頁上的所有相對路徑在連結時都將在前面加上基連結指向的地址。
重要屬性:
href—設定首碼的連結地址
target—設定檔案顯示的視窗,同a標記中的target
簡單例子:
<html><head><base href=http://localhost target="_blank"><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>base標記</title><link rel="Shortcut Icon" href="ani.CUR"></head><body><a href="x.htm" target="_self">x.html</a><a href="y.htm">y.html</a></body></html>
當點了連結後,跳出的檔案是http://localhost/x.htm或http://localhost/y.htm,它就是在這些相對路徑的檔案前加上基連結指向的地址。如果目標檔案中的連結沒有指定target屬性,就用base標記中的target屬性。
常在架構結構中用,如左右兩個架構,把左邊的架構中檔案裡的串連都顯示在右邊的架構裡。只要用base標記,把其target屬性值寫為右架構名稱,這就不用再為左架構裡的檔案中的每一個串連都指定target屬性。
當使用時,BASE 元素必須出現在文檔的 HEAD 內,在任何對外部源的引用之前。
另外,如果頁面轉向某個Servlet,而Servlet裡又是forward到的某個jsp頁面,如果這時寫相對路徑就應該先找到Servlet的路徑,也就是web.xml中配置的url-pattern中的路徑,如:假設有個x.jsp放在webapplication根目錄下,而首頁index.jsp是提交到servlet上去的,由Servlet來分發forward到x.jsp,Servlet的url配置如下
<url-pattern>/servlet/TestServlet</url-pattern>
那麼Servlet完成forward轉向後,如果沒有<base href="<%=basePath%>">,x.jsp中<script type="text/JavaScript" src="script/check.js"></script>就會失效,因為Servlet的訪問路徑為http://localhost/webapp/servlet/TestServlet那麼web伺服器會到http://localhost/webapp/servlet/script/下去找check.js此時這裡肯定是沒有這個檔案的,所以,如果遇到這樣的情況建議使用絕對路徑就不會有錯.
<script type="text/javascript" src="<%=path%>/script/check.js"></script>
個人補充:target屬性
//============================================================================
//============================================================================
//============================================================================
今天在寫一個JSP網頁的時候,href不能用了,所有href滑鼠放上去前面現實的都是“http:///”,竟然有三個“/”,而且前面也沒有顯示“localhost:8080”找了大半天找不出來,最後才發現不小心將Eclipse自動產生的下面兩行代碼誤刪了,
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
我一直沒有使用path 和 basepath ,為什麼會這樣呢,最後終於發現,原來在 <head></head>中,有一句 <base href="<%=basePath%>"> 使用了basepath,就是因為這句,所有的連結才不能使用了。看來問題就出在base href 上了,顧名思義,base href不是就是基連結嘛。
上網搜尋了一下,原來base href 不單單只有這麼點作用,尤其在架構中。
資料如下:
base標記是一個基連結標記,是一個單標記。用以改變檔案中所有連結標記的參數內定值。它只能應用於標記<head>與</head>之間。
你網頁上的所有相對路徑在連結時都將在前面加上基連結指向的地址。
重要屬性:
href
設定首碼的連結地址
target
設定檔案顯示的視窗,同a標記中的target
簡單例子:
<html>
<head>
<base href="http://www.baidu.com" target="_blank">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>base標記</title>
<link rel="Shortcut Icon" href="ani.CUR">
</head>
<body>
<a href="77.htm" target="_self">77</a>
<a href="88.htm">88</a>
</body>
</html>
當點了連結後,跳出的檔案是http://www.baidu.com/77.htm或http://www.baidu.com/88.htm,它就是在這些相對路徑的檔案前加上基連結指向的地址。如果目標檔案中的連結沒有指定target屬性,就用base標記中的target屬性。
常在架構結構中用,如左右兩個架構,把左邊的架構中檔案裡的串連都顯示在右邊的架構裡。只要用base標記,把其target屬性值寫為右架構名稱,這就不用再為左架構裡的檔案中的每一個串連都指定target屬性。
當使用時,BASE 元素必須出現在文檔的 HEAD 內,在任何對外部源的引用之前。
此元素在 Microsoft? Internet Explorer 3.0 的 HTML 中可用,在 Internet Explorer 4.0 的指令碼中可用。
此元素不會被渲染。
此元素不需要關閉標籤。
這個標籤的用處是解決編程時候的相對路徑問題,比如有的cms,因為每頁路徑不一樣,他就給你產生<a href="/sdsd/dsd.html">sddsds</a>之類的,如果我在本地調試,肯定會在本地開一個目錄的,這樣就亂了,你可以把它產生相對路徑,如<a href="sdsd/dsd.html">sddsds</a>,只要在head部分加上<base href=http://localhost/abc/>即可。
所以說,這個標籤主要為瞭解決web編程的時候一些相對路徑的問題。
當然,這個base還有一個用法,如在head部分加上這麼一行: <base href="_blank"> ,就是預設所有連結在新視窗開啟。
還可以這麼理解:
這是設定基礎路徑的,basepath為變數
簡單的靜態網頁的話你設定比如:<base href="http://www.baidu.com">,那你下面的href屬性就會以你上面設的為基準,如:<a href="http://www.baidu.com/xxx.htm"></a>你現在就只需要寫<a href="xxx.htm"></a>
如何理解jsp頁面的“<base href="<%=basePath%>">”