当前位置 : 主页 > 编程语言 > java >

如何理解jsp页面中的“<base href="<%=basePath%>">”?

来源:互联网 收集:自由互联 发布时间:2021-06-25
jsp文件里通常有以下代码: 这里的 base href="%=basePath%" 是什么意思呢? 我在W3School网站上查了html中的base标签,解释如下: base 标签为页面上的所有链接规定默认地址或默认目标。 通常

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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

它们绝对不是无用代码,详细如下:

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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

当点了链接后,跳出的文件是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>
  • 1

那么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>
  • 1

个人补充:target属性 

网友评论