`
ayumi11111
  • 浏览: 23955 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

解决JSP中的路径问题(推荐使用绝对路径)

    博客分类:
  • java
阅读更多

在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)。。。

分享到:
评论
2 楼 ayumi11111 2011-03-21  
yes hehe
1 楼 yangbobestone 2011-03-20  
嗯。。。就是这样的。。。虽然我没犯过这样的错误。。。但是初学者一定注意了哦。。。

相关推荐

    JSP中绝对路径与相对路径

    ### JSP中绝对路径与相对路径的理解与应用 #### 一、引言 在Web开发中,路径的选择对于页面间的跳转以及资源的加载至关重要。本文将深入探讨JSP(JavaServer Pages)环境中绝对路径与相对路径的区别及其应用场景,...

    JSP 页面中用绝对路径显示图片

    在JSP中使用绝对路径显示图片,可以确保无论用户如何浏览网站,图片都能正确加载。这种方法尤其适用于静态资源管理,比如在多个页面中重复使用的背景图片或者logo。 首先,了解JSP的基本结构。JSP是由HTML、CSS、...

    JSP、Servlet中的相对路径和绝对路径(包括路径问题).mht

    JSP、Servlet中的相对路径和绝对路径(包括路径问题),解决繁琐的路径问题。

    jsp路径问题

    jsp根路径解决方法,可以解决相对路径与绝对路径之间混淆的问题。

    jsp html 路径解决

    在JSP开发中,理解并熟练掌握绝对路径与相对路径的概念和用法,以及如何利用JSTL等标签库和EL表达式来简化路径管理是非常重要的。此外,熟悉JSP内置对象的使用也是提高开发效率的关键之一。通过本文的学习,希望能够...

    jsp相对路径绝对路径解决...

    很好帮助理解路径问题,供大家参考使用.....................

    JSP中java脚本获取绝对路径

    JSP中java脚本获取绝对路径 。

    java中相对路径与绝对路径的问题

    在 JSP 编程中,我们可以使用 `request.getRequestURI()` 来获取当前实际运用的相对路径和绝对路径根列表所对应的绝对路径。此外,我们还可以使用 `application.getRealPath(request.getRequestURI())` 来获取文档的...

    java Web 中相对路径绝对路径问题总结

    以下是对Java Web中相对路径与绝对路径问题的深入总结: ### 一、路径概念与标准 #### 1. URL与URI URL(Uniform Resource Locator)统一资源定位符,是一种用于标识网络上资源位置的标准格式,如`...

    JSP相对路径的练习

    3. **在JSP中使用相对路径** - **链接**:在`&lt;a&gt;`标签中,使用相对路径创建指向其他JSP或HTML页面的链接。 - **图像引用**:在`&lt;img&gt;`标签的`src`属性中,使用相对路径加载图片资源。 - **样式表和脚本引用**:在...

    Servlet中的相对路径和绝对路径归纳

    需要注意的是,即使在 `&lt;url-pattern&gt;` 中使用模式匹配的 `*.do`,也仍然应该理解成从 `/` 开始。 3. RequestDispatcher 中的路径 在使用 `RequestDispatcher` 时,可以使用相对路径或绝对路径。例如: `...

    JSP中得到几种得到路径的方法

    为了获取页面所在目录的绝对路径,可以使用`new java.io.File(application.getRealPath(request.getRequestURI())).getParent();`。该方法结合了`getRealPath()`和`File`类的功能,返回的是不包含具体文件名的目录...

    JSP的相对路径深入研究

    JSP相对路径深入研究是指在JSP文件中使用图片、CSS、JavaScript等资源时,如何正确地计算相对路径,以便正确地加载资源。下面我们将深入研究JSP相对路径的计算规则。 第一种情况:直接访问JSP文件 当我们直接访问...

    Java开发绝对和相对路径问题

    Java 开发中,路径问题是非常重要的一方面,不同的路径表示方式会带来不同的结果,了解绝对路径和相对路径的概念和使用方法对Java 开发非常重要。本文总结了Java 开发中的路径问题,帮助开发朋友方便解决路径问题,...

    jsp版ueditor图片在线管理返回绝对路径

    【标题】"jsp版ueditor图片在线管理返回绝对路径"主要涉及的是在使用JSP(JavaServer Pages)技术配合ueditor编辑器时,如何实现图片上传并返回服务器上的绝对路径,以便于在网页中正确显示图片。ueditor是一款功能...

    绝对路径和相对路径

    - **Send Redirect**:在JSP中使用`response.sendRedirect(address)`时,`address`也是在服务器端解析的,但这里需要注意的是,`address`应为一个绝对路径。 ##### 2.2 客户端的地址 所有HTML页面中的相对地址都是...

    Java相对路径绝对路径总结

    - **Send Redirect**: 在JSP中使用`response.sendRedirect("/rtccp/user/a.jsp");`进行重定向。这里的地址也是相对于当前Web应用的。 ##### 2.2 客户端的地址 所有HTML页面中的相对地址都是相对于服务器根目录的...

    jsp_servlet路径问题

    - **sendRedirect**:在JSP中使用`response.sendRedirect("/rtccp/user/a.jsp");`来实现重定向。 **2. 客户端的地址** 所有HTML页面中的相对地址都是相对于服务器根目录的,而不是相对于特定Web应用的目录。 - **...

Global site tag (gtag.js) - Google Analytics