JSP的相对路径深入研究!

原创 2011年01月17日 16:45:00

 

 

 

 

如图,要在/jsp/index.jsp文件中使用/images文件夹下的go.gif图片,如何计算相对路径? 经过Servlet,struts转发或重定向后情况又有如何变化?

目录结构:
图片

知识要点:相对路径的计算以浏览器地址栏为准

------------------------------------------------------------------------------

 

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

URL http://localhost/request.getContextPath/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

大家在平常的web项目开发时一定有注意到,当新建一个jsp文件后,文件代码中自动生成了如下代码:

...

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

...

<base href="<%=basePath%>">

...

这三句代码有什么作用呢?

注意回看上面“1.使用绝对路径

<img src='<%=request.getContextPath() %>/images/go.gif'/>”的地方,没错

String path =request.getContextPath();得到的是文件的根目录,
 request.getScheme()
web传输协议(http),request.getServerName()是服务器域名(localhost),
request.getServerPort()
是服务端口号(8080

所以path就是文件的根目录,basePath就是基本路径

由此<base href="<%=basePath%>">也就好理解了——设置当前.jsp文件基本路径为basePath.

 

有了上面三句代码,再使用图片时只用这样写就可以了

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

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

(注意:由于.jsp文件自动生成上述代码,因此如果要使用相对路径,一定要手动删掉上述代码,否则图片无法显示!)

 

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

使用request转发(地址栏不会发生变化)

(以下情况都是去掉了上述自动生成的代码的条件下) 

1、使用相对路径 

URLhttp://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使用相对路径

URLhttp://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'/>

 

使用response重定向后地址栏变为定向后的页面地址,所以使用情况和直接访问JSP文件一样

------------------------------------------------------------------------------

 

总结:相对路径是由浏览器通过地址栏分析出来的,与服务器端文件的存放路径没有关系,由其是使用Servlet,struts转发到某jsp文件后,某jsp在服务器端存放的位置是/a/b/c/d/f/g.jsp , 但经过Servlet,struts转发后,浏览器的地址栏可不一定是/a/b/c/d/f/这样的层次。所以相对路径的计算以浏览器地址栏为准。原创地址:http://www.javaeye.com/,我增减了部分内容,以便能更好理解,希望对大家有帮助!

 

 

附:

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

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

 

                                                                                
                                    
                                                                                                                                                               点击我试试 

JSP的相对路径深入研究

要在/jsp/index.jsp文件使用图片,如何计算相对路径? 经过Servlet,struts转发后又如何计算相对路径?    目录结构:-----------------------------...
  • jsship
  • jsship
  • 2010年09月27日 15:18
  • 1806

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

作者:赵磊 博客:http://elf8848.iteye.com   要在/jsp/index.jsp文件使用图片,如何计算相对路径? 经过Servlet,struts转发后又如何计算相对...
  • elf8848
  • elf8848
  • 2014年10月09日 10:32
  • 338

关于在jsp中使用图片相对路径的问题

引用 div class="zj02"> 试试! ../=parent path;./=current path 原问答:http://www.iteye.com/problems...
  • mmoooodd
  • mmoooodd
  • 2015年11月12日 15:26
  • 927

java、jsp中相对路径与绝对路径问题

(转载) 1.基本概念的理解   绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如: C:\xyz\test.txt 代表了test.txt文件的...
  • pianistOfSoftware
  • pianistOfSoftware
  • 2016年07月14日 10:33
  • 1521

JSP相对路径和绝对路径

很长一段时间纠结过JSP中的相对路径和绝对路径,也研究过一段时间,今天趁着有点时间,记录下来,也给大家分享一下1 先理解相对路径我的项目结构如下 0 相对路径当前文件所在路径, 在当前文件调用一个...
  • qq_33589510
  • qq_33589510
  • 2017年04月23日 17:44
  • 477

JSP取得绝对路径和相对路径方法

刚开始做SSH网上商城的时候,在前台的JSP页面中发现所有的图片地址都会这样写:“${pageContext.request.contextPath} /image /.....”。或许是因为之前做的...
  • u010375663
  • u010375663
  • 2016年02月29日 10:54
  • 1306

JSP的相对路径深入研究(更新中...)

问题描述:        要在/jsp/index.jsp文件使用图片,如何计算相对路径? 经过Servlet,struts转发后        又如何计算相对路径?     目录结构:   ...
  • pplsunny
  • pplsunny
  • 2013年10月03日 10:43
  • 1662

JSP的相对路径深入研究(多次完善)

要在/jsp/index.jsp文件使用图片,如何计算相对路径? 经过Servlet,struts转发后又如何计算相对路径 ?           目录结构:        ---------...
  • hld_hepeng
  • hld_hepeng
  • 2011年05月10日 11:14
  • 290

JSP页面中的相对路径问题

在JSP页面中,根据解析地方的不同可以分为两种,一种是在服务器端解析的,还有一种是在客户浏览器端解析的。 在JSP页面内嵌的java代码中,”/”是相对于项目应用webapp而言的,例如在项目m...
  • myself_helper
  • myself_helper
  • 2014年04月14日 22:01
  • 897

【JSP】JSP项目相对路径与绝对路径问题

很多人写网页的时候都会用相对路径,也不知道是不是习惯问题吧,其实我以前也一直都是用相对路径的,直到最近做项目的时候出现路径问题。我想应该有不少人遇到过这样的情况:当使用服务器跳转,例如:forward...
  • LZGS_4
  • LZGS_4
  • 2015年02月01日 10:32
  • 1629
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JSP的相对路径深入研究!
举报原因:
原因补充:

(最多只允许输入30个字)