`
最王座
  • 浏览: 139290 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Jsp相对路径与绝对路径

阅读更多

在JSP中的如果使用 "相对路径"  则有可能会出现问题,因为网页中的"相对路径" , 他是相对于当前页的"URL请求的地址" 去寻找资源。

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

我们在浏览器中输入地址 (注意: 地址的内容): 
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)。。。

 

分享到:
评论

相关推荐

    JSP中绝对路径与相对路径

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

    JSP相对路径的练习

    相对路径是相对于当前文档位置的路径,与之相对的是绝对路径,它是从文件系统根目录开始的完整路径。本练习将深入探讨JSP中的相对路径使用,帮助开发者提升网页开发的效率和灵活性。 1. **相对路径的基本概念** - ...

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

    "Java 中相对路径与绝对路径的问题" Java 中的路径问题一直是困扰许多编程人员的问题之一。在 Java 中,我们需要了解相对路径和绝对路径的概念,以及如何获取它们。下面我们将详细地讨论 Java 中的相对路径和绝对...

    JSP的相对路径深入研究

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

    Java相对路径绝对路径总结

    #### 二、JSP/Servlet中的相对路径和绝对路径 ##### 2.1 服务器端的地址 服务器端的相对地址是指相对于Web应用的地址。在服务器端解析时,这些地址与客户端浏览器解析的不同。 - **Forward**: 在Servlet中使用`...

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

    Servlet 中的相对路径和绝对路径归纳 在 Servlet 编程中,路径是非常重要的一个概念。路径可以分为相对路径和绝对路径两种,在不同的场景下,选择合适的路径类型非常重要。本文将对 Servlet 中的相对路径和绝对路径...

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

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

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

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

    绝对路径和相对路径

    在JSP和Servlet中获取当前应用的相对路径和绝对路径非常重要,可以帮助开发者更好地处理文件和目录。 ##### 3.1 JSP中获得当前应用的相对路径和绝对路径 - **根目录所对应的绝对路径**:可以通过`request....

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

    在Java Web开发中,理解和掌握相对路径与绝对路径的运用是至关重要的,因为这直接影响到资源定位、页面跳转以及文件读写等操作的正确性。以下是对Java Web中相对路径与绝对路径问题的深入总结: ### 一、路径概念与...

    java绝对路径和相对路径

    ### Java中的绝对路径与相对路径 在Java编程中,路径管理是进行文件操作的重要组成部分,尤其是在Web应用开发中。本文将详细介绍如何在Java中获取不同类型的路径,包括Web服务器下的文件路径、本地路径以及相对路径...

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

    绝对路径是相对于服务器根目录的完整路径,而不是相对于当前工作目录或者相对路径。在JSP中使用绝对路径显示图片,可以确保无论用户如何浏览网站,图片都能正确加载。这种方法尤其适用于静态资源管理,比如在多个...

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

    2. JSP/Servlet 中的相对路径和绝对路径 在 JSP/Servlet 中,路径问题非常重要,正确的理解和使用路径可以避免许多问题。 2.1 服务器端的地址 在 JSP/Servlet 中,服务器端的相对地址指的是相对于当前 Web 应用的...

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

    #### JSP/Servlet中的相对路径和绝对路径 在Java Web应用中,路径的解析方式取决于它所在的上下文环境。主要分为两大类:服务器端路径和客户端路径。 ### 服务器端路径 **服务器端路径**是指在服务器端进行解析的...

    java中相对路径,绝对路径问题总结.doc

    本文主要涵盖了Java中相对路径和绝对路径的基本概念,以及它们在JSP和Servlet中的应用。以下是对这些概念的详细解释: 1. **绝对路径**: 绝对路径是文件或目录在文件系统中的完整路径,它明确指出了从根目录开始...

    在JAVA文件中获取该项目的相对路径.doc

    2. JSP/Servlet 中的相对路径和绝对路径 在 JSP/Servlet 中,相对路径和绝对路径的概念非常重要。在服务器端,相对地址是相对于 Web 应用的地址,而不是 HTML 和 JavaScript 中的相对地址,它们是由客户端浏览器...

    jsp路径问题

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

    jsp html 路径解决

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

Global site tag (gtag.js) - Google Analytics