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的相对路径深入研究

  • 2010-12-31 00:20
  • 52KB
  • 下载

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

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

JSP的相对路径深入研究

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

php绝对路径与相对路径之间关系的的深入研究

转自:http://www.chinaz.com/program/2010/0303/107600.shtml php中好像不能像asp那样用“/”表示根目录,代之以$_SERVER['DOC...

php绝对路径与相对路径之间关系的的深入研究

php中好像不能像asp那样用“/”表示根目录,代之以$_SERVER['DOCUMENT_ROOT'],其它则相同:../表示向上一层。./表示当前层。假如现在a/b/c/s.php要调用根目录下的...

php绝对路径与相对路径之间关系的的深入研究

前一阵子老是受php开发中,文件互相引入require()相对位置关系的困扰,为了彻底弄清它们的关系,笔者做了个实验。

jsp路径深入研究<转载>

要在/jsp/index.jsp文件使用图片,如何计算相对路径? 经过Servlet,struts转发后又如何计算相对路径 ?      相对路径是由浏览器通过地址栏分析出来的,与服务器端文件的存放...

JSP Servlet里相对路径问题的解决

前提:用MyEclipse建的Web Project。服务器地址为http://localhost:8080/,Web Project名为li,那么web应用URL为http://localhost:...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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