jsp中的basePath和path(绝对路径 相对路径)

在JSP中的如果使用 "相对路径" 则有

可能会出现问题.

因为 网页中的 "相对路径" , 他是相对于 "URL请求的地址" 去寻找资源.

上面这句话是什么意思呢 ?
举个例子:
假如我们有一个项目: MyApp
在该项目下, 有一个jsp文件夹
该文件夹下包括:
login.jsp    // 登陆页面
register.jps // 注册页面

我们在浏览器中输入地址 (注意: 地址的内容):
http://localhost:8080/MyApp/jsp/login.jsp
这时候, 浏览器会链接到 "登陆页面" (login.jsp)
在login.jsp文件内包含了如下 "部分代码":
<a href="jsp/register.jsp">注册用户 </a>

那么,如果我们点击这个链接,就会在浏览器地址栏中, 出现如下错误链接:
http://localhost:8080/MyApp/jsp/jsp/register.jsp

看~~
为什么会出现"/jsp/jsp/register.jsp"呢?
因为, 网页中的"相对链接", 是相对于你所 "请求的URL路径" 所决定的.

即:

因为这里请求路径是:http://localhost:8080/MyApp/jsp/login.jsp

那么, 浏览器 就会在这个路径下(即:http://localhost:8080/MyApp/jsp/)去找

jsp/register.jsp
所以就会出现如下错误内容:
http://localhost:8080/MyApp/jsp/jsp/register.jsp

上面的问题,就是调用页面和被调用页面的URL不同所造成的,
此类错误也常常会出现在2个页面之间进行 "转发"(forward) 操作的时候。
因为forward是在后台进行的,对客户端来说是透明的。(即: URL不改变,而数

据内容却是另一个页面返回来的。。。)

那么如何解决这问题呢?

(一)方法一:直接采用绝对路径 (不推荐)
在JSP页面端,获得本项目的绝对地址(如果你的项目叫MyApp,那么获得到的地

址就是 http://localhost:8080/MyApp/):
代码如下:
<!-- **************方法一***************** -->
<%@ page language="java" pageEncoding="GBK"

contentType="text/html;charset=gbk" isELIgnored="false"%>
<%
String path = request.getContextPath();
// 获得本项目的地址(例如: http://localhost:8080/MyApp/)赋值给basePath

变量
String basePath = request.getScheme()+"://"+request.getServerName()

+":"+request.getServerPort()+path+"/";
// 将 "项目路径basePath" 放入pageContext中,待以后用EL表达式读出。
pageContext.setAttribute("basePath",basePath);
%>
<html>
<head> </head>
<body>
<a href="${pageScope.basePath}jsp/register.jsp">
</body>
</html>
<!-- *************************************-->

我们可以看到,在标签 <a>中的href属性内,我们直接采用了
“本项目路径 ${pageScope.basePath}” 加上 "jsp/register.jsp" ,
从而构成一个绝对路径(即: http://localhost:8080/MyApp/jsp/register.jsp)

但是这样做有一个很不好的地方,那就是我们必须要在每个链接的前面都要加上

“${pageScope.basePath}”
如果这样做的话,将是一件很可怕的事情。

(二)方法二: 利用html中的 <base>标签(推荐)
下面是对html中的 <base>的介绍:
base 元素可规定页面中所有链接的基准 URL
默认情况下,页面中的链接(包括样式表、脚本和图像的地址)都是相对于当前

页面的地址(即:浏览器地址栏里的请求URL)。
我们可以使用 <base>标签中的href属性来设置,所有的“相对基准 URL”。

上面说的是什么意思呢?我们来看看代码就知道咯~~

这是JSP端的代码
下面的代码 (十分类似上面 "方法一" 中的JSP代码)
但是这里我们并没有采用 ${pageScope.basePath}+"相对路径地址" 的方法,
而是采用了html文件中的 <base>标签:
代码如下:
<!-- *************JSP代码******************-->
<%@ page language="java" pageEncoding="GBK"

contentType="text/html;charset=gbk" isELIgnored="false"%>
<%
String path = request.getContextPath();
// 获得项目完全路径(假设你的项目叫MyApp,那么获得到的地址就是

http://localhost:8080/MyApp/):
String basePath = request.getScheme()+"://"+request.getServerName()

+":"+request.getServerPort()+path+"/";
%>
<html>
<head>
<!-- base需要放到head中 -->
<base href=" <%=basePath%>">
</head>
// 这里我们就可以直接使用相对路径(即: 相对于base标签)
<a href="jsp/login.jsp">Login </a>
</html>
<!-- *************************************-->

大概看完了上面的代码,或许您还是有些疑惑 *_*~~
不过当您看到了,下面的代码,可能就豁然开朗了 (*^__^*) 嘻嘻……。

当我们去执行上面的那段JSP代码后,我们可以在浏览器中可以查看,他所返回

给客户端的html代码:
执行完上述JSP后,所返回的html代码如下:
<html>
<head>
<base href="http://localhost:8080/MyApp/">
</head>
// 设置了 <base>后,相对路径,相对于的就是base中的路径,而不再是浏览器

地址的请求路径啦~~~
<a href="jsp/login.jsp">Login </a>
</html>

我们可以看到JSP返回的html代码中,包含了 <base

href="http://localhost:8080/MyApp/">内容。
也就是说,在本html文件中,遇到的所有 “相对链接(例如: <a

href="jsp/login.jsp">)”,都是相对于base
的路径(即:http://localhost:8080/MyApp/),所以我们就可以进行的使用 相对

链接,而不必担心,
转发操作(forward)或 请求地址不同不同所造成的页面无法找到的错误啦~(即:

HTTP: 404)。。。

原文地址: http://blog.csdn.net/liuboscu/archive/2009/08/23/4475520.aspx

时间: 2024-10-09 03:48:03

jsp中的basePath和path(绝对路径 相对路径)的相关文章

jsp中的basePath,获取应用的路径

1 2 3 4 5 String path = request.getContextPath();     String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";     <base href="<%=basePath%>">  request.ge

在JSP中basepath的作用

basepath的作用 在谈basePath之前,先来讨论一下相对路径与绝对路径的区别. 相对路径-以引用文件之网页所在位置为参考基础,而建立出的目录路径. 绝对路径-以Web站点根目录为参考基础的目录路径. 在web应用程序中绝对路径不是指的磁盘文件中盘符目录路径.如:C:\Windows\System32 其实绝对路径与相对路径的不同处,只在于描述目录路径时,所采用的参考点不同.由于对网站上所有文件而言,根目录这个参考点对所有文件都是一样的,因此,运用以根目录为参考点的路径描述方式才会被称之

关于在jsp中的路径问题

前言: jsp作为javaweb开发中常见的视图技术,我们平时在开发项目使用的过程中,经常会导入一些静态资源,比如css\js\jpg.png等图片格式的文件,这些文件的路径成了问题,经常会出现索引不到的情况发生,本篇博客就来探究一下jsp中的路径问题. 本篇博客目录: 一:基本常识 首先告诉几个常识: 1:我们常用的web项目是运行在tomcat中,而tomcat容器不会识别包中的src文件,它识别的是编译后的class类,所以按照Eclispe的结构Project-Src-WebRoot/W

jsp中的路径

我的原则 所有路径一律使用绝对路径,就是以"/"开头的或者带host的路径.形如: /imgs/1.jpg <%= request.getContextPath()%>/imgs/1.jpg //推荐使用 http://localhost:8080/imgs/1.jpg 应该尽量避免使用类似".","./","../../"等类似的相对该文件位置的相对路径.一方面,这样当文件移动时,很容易出问题.另一方面,绝对路径

在Jsp中调用静态资源,路径配置问题

在Jsp中调用图片.JS脚本等,针对取得的路径有两种调用方式: 1.放入Body中生成绝对路径(不建议) <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%    String path = request.getContextPath();    String basePath = request.getScheme()+":/

jsp中超链接路径的写法

主题 超链接不就是一个地址字符串吗?这能有什么花头? LZSB! 曾经我也是这么想的.... 最近对apache的学习让我对网页中超链接,CSS,js的路径的写法有了一些新的认识. 所以这篇文章主要分享一下我的一些想法与发现.. 相对路径 最早以前我用的就是相对路径,刚开始感觉用起来很爽...很简单...比如当前路径是localhost:8080/projectName/a.jsp 我想超链接到localhost:8080/projectName/b.jsp 我只需要写<a href="b

【JSP中引入文件】JSP中获取根路径+引用js文件

在jsp界面中经常需要引入js.css等文件,通常都需要先获取项目根路径,然后再引入文件. 例如: 项目路径如下,需要在index.jsp中引入FusionCharts相关的js.css等: index.jsp <%@ page language="java" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.get

jsp中的路径问题.

以前对路径的这个问题没有怎么深究过,知道有绝对路径和相对路径这么一个概念,带盘符的是绝对路径,不带盘符的是相对路径.如:c:\abc就是绝对路径 ,\abc就是相对当前目录的相对路径.还有什么的window的盘符"\"和linux的"/"etc. 但是这两天在jsp中引用extjs文件时我直接把html中引用语句copy进来.在html文件中访问没有任何的问题,如下: <link rel="stylesheet" type="te

JSP中URL路径获取问题

项目需求是内网也就是ip+端口号可以访问资源,但是后来要上外网可以访问,资源类似的服务,外网是前置机Nginx+tomcat,为了解决同一个登录页面适应内网和外网,就想在登录jsp中添加java判断,试了多次有了如下结果. 1 获取域名或者/前第一个请求的url名称方法是 request.getServerName(); 2 在通过basePath请求静态资源的时候,如果src开头有 "/",那src会自动补上真实路径第一个"/"前的请求地址: 如果src开头不是&