`

JSP的相对路径--深入研究

阅读更多

作者:赵磊

博客:http://elf8848.iteye.com

 

要在/jsp/index.jsp文件使用图片,如何计算相对路径? 经过Servlet,struts转发后又如何计算相对路径     

相对路径是由浏览器通过地址栏分析出来的,与服务器端文件的存放路径没有关系,由其是使用 Servlet,struts转发到某jsp文件后,某jsp在服务器端存放的位置是/a/b/c/d/f/g.jsp , 但经过Servlet,struts转发后,浏览器的地址栏可不一定是/a/b/c/d/f/这样的层次。所以相对路径的计算以浏览器地址栏为准 。原创地址:http://elf8848.iteye.com/

 

目录结构如下图:

 

    

 

--------------------第一种情况 :直接访问JSP文件 ---------------------------------------

 


URL是 http://localhost/Context path /jsp/index.jsp

 

要在index.jsp引用go.gif文件:

1、使用决对路径

<img src='<%=request.getContextPath() %>/images/go.gif'/>

浏览器寻找方式: 域名+/Context path/images/go.gif   ,可找到。

 

 

2、使用相对路径

<img src='../images/go.gif'/>

浏览器寻找方式:通过地址栏分析,index.jsp所在目录(jsp )的上一层目录(WebRoot)下的images/go.gif文件  

 

 

3、使用base href

<%=request.getContextPath() %>太麻烦,可以在每一个jsp文件顶部加入以下代码

<% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <base href="<%=basePath%>">

 

 

 <img src='images/go.gif'/>

浏览器寻找方式: basePath的值http://localhost/Context path/ 再加上images/go.gif,可找到。

 

 

----------------------- 第二种情况: servlet转发到jsp ---------------------------------------


1、使用相对路径  

URL是http://localhost/Context path /servlet_2   (转发到/jsp/index.jsp)

 

错误:

根据/jsp/index.jsp路径计算,得到 <img src='../images/go.gif'/>

 

 

正确:

<img src='images/go.gif'/>

 

原因:

index.jsp是保存在服务器端的/jsp/index.jsp目录下面,但通过转发后浏览器并不知道/jsp/目录的存在,因为地址栏中没有体现出来。所以服务器端/jsp/目录并不会对相对路径产生影响

浏览器寻找方式:通过地址栏分析http://localhost/Context path /servlet_2 ,相对于servlet_2所在目录(/)下面找到images/go.gif文件

 

 

2、使用相对路径

URL是http://localhost/Context path /servlet /ser/ser/servlet_1 (转发到/jsp/index.jsp)

 

“/servlet /ser/ser/servlet_1 是在web.xml文件配置的

 

错误:

根据/jsp/index.jsp路径计算,得到 <img src='../images/go.gif'/>

 

正确:  

<img src='../../../images/go.gif'/>

 

原因:

index.jsp是保存在服务器端的/jsp/index.jsp目录下面,但通过转发后浏览器并不知道/jsp/目录的存在,因为地址栏中没有体现出来。所以服务器端/jsp/目录并不会对相对路径产生影响

浏览器寻找方式:通过地址栏分析http://localhost/Context path / servlet /ser/ser/servlet_1,相对于servlet_1所在目录(ser)的上一层目录的上一层目录的上一层目录(/)下的images/go.gif文件

 

 

3、使用决对路径

<img src='<%=request.getContextPath() %>/images/go.gif'/>

 

------------------------------- 总结 -----------------------------------------------

 

相对路径是由浏览器通过地址栏分析出来的,与服务器端文件的存放路径没有关系,由其是使用Servlet,struts转发到某jsp文件后,某jsp在服务器端存放的位置是/a/b/c/d/f/g.jsp , 但经过Servlet,struts转发后,浏览器的地址栏可不一定是/a/b/c/d/f/这样的层次。所以相对路径的计算以浏览器地址栏为准 。原创地址:http://elf8848.iteye.com/

 

 

struts2中可以使用命名空间,来保证浏览器地址栏中的目录层次与服务器端目录层次的一致性,这样程序员通过服务器端的目录层次计算相对路径,在浏览器中也是正常的。

但我们理解了原理,就算不使用命名空间,自己也有强大的控制力。

 

转载入注明出处:JAVA应用与开发办公室 http://elf8848.iteye.com/

  • 大小: 19.2 KB
分享到:
评论
11 楼 phenom 2010-02-24  
在一个Frameset框架页面.子Frame里应该怎么用呢?如果猫的Context设为FrameContext.
那JSP通常会用<%=request.getContextPath() %>/XX.js来引入JS文件,
JSP页面的JS里的请求:如AJAX也可以用<%=request.getContextPath() %>/XX.do来处理
但是到了JS文件里的就不能了.换成/XX.do就会到主机名+端口号.没有了FrameContext.如果换成XX.do显然也不对.应该如何处理呢?
10 楼 simplejacky2009 2010-02-21  
request.getContextPath()/dir1/dir2/**.jsp
9 楼 citymoon2000 2010-02-16  
我正好遇到同样的问题,终于找到答案了, 我把css和图片路径改成绝对路径就好了
8 楼 lucane 2009-08-07  
在一个jsp里专门引js&css,在里面做成http打头的绝对路径

要不就写个标签,同上
7 楼 kjj 2009-08-06  
我一直用相对路径 ,有时也用绝对路径!!
6 楼 brucewuu 2009-08-06  
谢谢你们哈 ,我貌似懂了一些了,也解决了一些问题了
5 楼 chbest 2009-08-06  
直接写绝对路径不就可以了吗?
4 楼 elf8848 2009-08-06  
brucewuu 的问题与我文章的主题没有系吗!!
pejaming 也回答了一些, 我再补充一下。
pejaming也说了src下面的文件会输出到/WebRoot/WEB-INF/classes 下,
classes内的文件, 是不可以“直接”从浏览器中访问在, 但可以通过servlet转发。

还有如果只写/filefolder1/filefolder2/login.jsp 表示的位置又是怎样的?
答: Web应用/WebRoot
3 楼 pejaming 2009-08-06  
brucewuu 写道
问题一:
     我用MyEclipse 7.5 新建了一个web project ,名为test,在src目录(在test文件夹下)下新建了一个文件夹,名为jsp ,里面放的都是jsp得文件,其中有个login.jsp 文件,src目录和WebRoot目录在同一个文件夹下,WebRoot中有个index.jsp,是MyEclipse自动建的,我现在想在index.jsp 中增加一个超链接,为<a href="" >click to login page </a >, 我想问这里href应该如何填才能顺利跳转到src/jsp/login.jsp ,请大家帮忙?

问题二:
    我在src/jsp 目录下又建了一个register.jsp 文件,在login.jsp 中有个超链接跳转到register.jsp ,发现结果跳出来的竟然是register.jsp 的源代码,为什么会这样?

问题三:
   在浏览器里访问index.jsp的路径如下:
http://ad-af0ac77b9f5d:8080/test/
test为项目名,我现在想在浏览器中改变路径访问src/jsp/login.jsp ,于是我输入
http://ad-af0ac77b9f5d:8080/test/src/jsp/login.jsp ,结果是unavailable,可是我输入
http://ad-af0ac77b9f5d:8080/test/index.jsp 是可以访问到index.jsp 页面的,问题在哪里?
我不懂myeclipse里路径的位置到底是如何的?

您能帮我解决下这个问题吗?
还有如果只写/filefolder1/filefolder2/login.jsp 表示的位置又是怎样的?



src一般是放置源码的路径,可以在eclipse的buildpath下设置,编译时会将src下面的东东输出到指定的output folder下,用eclipse来建,默认是工程名/WebRoot/WEB-INF/classes
2 楼 brucewuu 2009-08-06  
问题一:
     我用MyEclipse 7.5 新建了一个web project ,名为test,在src目录(在test文件夹下)下新建了一个文件夹,名为jsp ,里面放的都是jsp得文件,其中有个login.jsp 文件,src目录和WebRoot目录在同一个文件夹下,WebRoot中有个index.jsp,是MyEclipse自动建的,我现在想在index.jsp 中增加一个超链接,为<a href="" >click to login page </a >, 我想问这里href应该如何填才能顺利跳转到src/jsp/login.jsp ,请大家帮忙?

问题二:
    我在src/jsp 目录下又建了一个register.jsp 文件,在login.jsp 中有个超链接跳转到register.jsp ,发现结果跳出来的竟然是register.jsp 的源代码,为什么会这样?

问题三:
   在浏览器里访问index.jsp的路径如下:
http://ad-af0ac77b9f5d:8080/test/
test为项目名,我现在想在浏览器中改变路径访问src/jsp/login.jsp ,于是我输入
http://ad-af0ac77b9f5d:8080/test/src/jsp/login.jsp ,结果是unavailable,可是我输入
http://ad-af0ac77b9f5d:8080/test/index.jsp 是可以访问到index.jsp 页面的,问题在哪里?
我不懂myeclipse里路径的位置到底是如何的?

您能帮我解决下这个问题吗?
还有如果只写/filefolder1/filefolder2/login.jsp 表示的位置又是怎样的?
1 楼 bryan.liu 2009-04-04  
其实,偶一直是用 <s:url value="/js/Common.js"/> 来写引用路径的,以不变应万变,:)

相关推荐

    JSP的相对路径深入研究

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

    JSP的相对路径如何计算深入研究

    本文将深入探讨在不同场景下,如何在JSP中正确计算和使用相对路径。 首先,我们来看直接访问JSP文件的情况。假设应用名为"Demo",其目录结构如下: ``` Demo └── demo └── webroot ├── images │ └─...

    jsp入门学习-如何成为jsp程序员

    - **建议**:避免深入研究Swing或Java图形界面编程,因为这些内容在JSP中很少使用。可以通过编写小型应用程序来练习。 ##### 4. 学习JavaScript - **目标**:掌握如何在HTML页面中使用JavaScript进行表单验证,...

    jsp:include与include实探

    这里的`page`属性指定要包含的资源路径,可以是相对URL或者绝对URL。`flush`属性默认为`false`,设置为`true`时,会清空响应缓冲区,确保被包含页面的内容立即写入响应。`jsp:include`在执行时是动态包含,这意味着...

    JSP源码——[图片动画]ttcodes JSP图片小偷 v1.0_jsp_tupian.zip

    - 文件路径管理,包括相对路径和绝对路径的处理,以及目录的创建和删除。 5. **多线程处理**: - 对于大量图片的下载,可能需要使用多线程来提高效率,避免阻塞用户界面。 - Java的`Thread`类或`ExecutorService...

    基于JSP的学生选课排课系统论文

    本文详细介绍了基于JSP的学生选课排课系统的开发过程,从需求分析到系统设计,再到详细设计和测试,每一环节都进行了深入探讨。通过该系统的实现,不仅提升了学校教学管理的自动化水平,也极大地改善了师生的教学...

    网站性能优化 Web开发 JSP java

    综上所述,通过对页面静态化、缓存技术、数据源管理、SSI技术以及权限模块等方面的深入研究和实践,我们可以有效地提升网站的整体性能和用户体验。在实际开发过程中,还需要根据具体的业务需求和技术架构,选择最...

    JSP高级编程

    本书既适合初学者阅读,也适合具有一定JSP基础的开发人员深入研究使用。 前 言 JSP是SUN公司推出的一种新型的Internet/Intranet开发语言,和前一代Internet/Intranet开发语言(ASP、PHP)相比,JSP在以下几个方面...

    扫描本地页面文件.html或jsp,按照原目录结构,提取页面相关的js.css.img等

    5. **资源提取**:将找到的JavaScript、CSS和图片文件从原始位置复制到新的目录结构中,保持相对路径的正确性。 标签中提到的“源码”意味着这个工具可能是开源的,用户可以查看和修改源代码以满足特定需求。“工具...

    struts-1.2.9-src.rar

    9. **ActionForward**:定义了Action执行后如何跳转到其他页面或Action,可以是相对路径或绝对路径,也可以指向一个Tiles定义的定义。 10. **Interceptor(拦截器)**:尽管Struts 1.2.9版本没有正式引入拦截器概念...

    毕业论文jsp583校园二手交易ssh.doc

    本文首先介绍了课题背景及研究意义,接着对所采用的技术进行概述,包括S2SH框架、JSP、MySQL数据库等。然后,详细阐述了需求分析,包括功能需求和非功能需求,以及可行性分析。接下来,通过业务流程分析和功能分析,...

    毕业论文jsp272在线音乐系统(ssh).doc

    随着信息技术的飞速发展,网络已经深入到人们的日常生活之中,而音乐作为人类精神生活的重要组成部分,其在线传播和分享也变得越来越普遍。音乐网站的出现,满足了用户随时随地欣赏音乐的需求,同时为音乐爱好者提供...

    毕业论文jsp729在线考试系统ssh.doc

    随着信息技术的飞速进步,网络已经深入到人们生活的各个角落,教育领域也不例外。在线考试系统作为现代教育信息化的重要组成部分,为教学活动提供了极大的便利。传统的考试模式往往受限于时间和地点,而基于JSP的...

    struts-1.3.5源码包级文档

    通过研究这个源码包级文档,开发者不仅能深入理解Struts 1.3.5的工作原理,还能提升对MVC设计模式的理解,为后续使用更新的Web框架如Struts 2或Spring MVC打下基础。同时,对于维护旧系统的开发者来说,这将是一份...

    ssh框架下的常见问题处理方式,免费下载

    开发者需要理解相对路径和绝对路径的概念,以及如何进行目录操作,如创建、删除、读取目录。在SSH框架中,可能涉及到动态构建资源路径,例如加载配置文件或静态资源,这时可以使用Spring的Resource对象,它支持类...

    计算机毕业论文

    - **课题目的与意义**:本课题旨在通过JSP、Servlet、JavaBean和JDBC等技术构建一个网上购书系统,不仅能够提高购书效率,还能促进电子商务的发展,并为其他类似项目提供参考。 #### 二、MVC设计模式 - **MVC设计...

    struts源代码

    通过深入研究Struts的源代码,开发者可以学习到如何组织和设计Web应用的架构,理解MVC模式的实现,以及如何利用框架来简化开发工作。此外,源代码中的注释和设计模式也对提升编程技能非常有帮助。总之,对Struts源...

    J2EE学习方法与指导

    学习J2EE需要遵循一定的步骤和方法,以下是一个逐步深入的学习路径。 首先,要从基础的Java语法入手,推荐阅读《Thinking in Java》来理解和掌握面向对象编程的基本概念,包括封装、继承和多态。在这个阶段,理解...

Global site tag (gtag.js) - Google Analytics