本文實例分析了JSP頁面文件中base標記用法。分享給大家供大家參考,具體如下:
我們在用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上去的,由Serlet來分發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>
希望本文所述對大家JSP程序設計有所幫助。
『貳』 很簡單的JSP問題,<base href="<%=basePath%>">這句話什麼意思
這是設置基礎路徑的,basepath為變數
簡單的靜態網頁的話你設置比如:<base href="http://www..com">,那你下面的href屬性就會以你上面設的為基準,如:<a href="http://www..com/xxx.htm"></a>你現在就只需要寫<a href="xxx.htm"></a>
『叄』 JSP中路徑問題
jsp頁面打頭寫<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
在需要寫路徑的地方寫
<%=basePath%>WEB-INF/pages/loginpages/LoginSuccess.jsp
其實如果就按照你自己的寫法,就是多寫了專一個/,你把/WEB-INF,改為WEB-INF估計就可屬以了
『肆』 關於MyEclipse中jsp的相對路徑問題
jsp用的是絕對路徑。你觀察一下,在文件的頭部是不是寫了這么一段話。
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
在JSP文件中,所有你寫的路徑默認是要加在basePath後面的。也就是說,你寫的路徑,要是相對於伺服器根目錄(就是文檔結構里的WebRoot文件夾)的相對路徑。
而html就沒有這個問題。它允許你寫相對的,也允許你寫絕對的。
回到你的例子上,你要先把圖片放在項目文件夾下面,然後,寫相對路徑。例如:你把圖片放在webroot下的image文件夾下面,那你就寫image/xx.gif就可以了。
『伍』 在jsp頁面<base href="<%=basePath%>">根本不起作用的原因是什麼
先是在頁面頂部定義變數,然後在base 標簽的 href 屬性設置頁面中所有相對鏈接的基準 URL,所以不能說沒有用。
<jsp:include page="<%=basePath%>Top.jsp"></jsp:include>
你沒使用<%=basePath%>當然就不會生效咯。
『陸』 如何在js文件中如何獲取basePath
js路徑的問題有時候不好處理,在jsp中,我們可以用el表達式直接獲取basePath,但是在單獨js文件中不能用el表達式,又不想在jsp中單獨的寫個變數,可以用以下方法:
var location = (window.location+'').split('/');
var basePath = location[0]+'//'+location[2]+'/'+location[3];
var url = basePath + '/js/xxx.js';
『柒』 jsp basepath問題
這個得看你自己需要了,上面一個相當於絕對路徑了,是從你的協議開始的(如http),而下面則只是表示的你的域名(一般就是你的項目名),相對於相對路徑,其實用兩個都是可以的,不過如果你為了控制提交路徑的話,最好用上面一個,然後在<head></head>標簽中加入<base href=「<%=basePath%>」,這樣做的目的是為了控製表單提交路徑