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

所属分类: 网络编程 / JSP编程 阅读数: 526
收藏 0 赞 0 分享
问题描述:

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

目录结构:

应用名字:Demo

demo

----webroot

----images

----go.gif

----jsp

----index.jsp

----css

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

第一种情况:直接访问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/这样的层次。所以相对路径的计算以浏览器地址栏为准。

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

但我们理解了原理,就算不使用命名空间,自己也有强大的控制力。
更多精彩内容其他人还在看

spring动态bean注册示例分享

这篇文章主要介绍了spring动态bean注册示例,需要的朋友可以参考下
收藏 0 赞 0 分享

JSP判断移动设备的正则

天猫php判断移动设备的正则(个人猜测),觉得很好用,于是就决定移植到JSP里面,大家可以参考下
收藏 0 赞 0 分享

jsp文件绝对路径的设置方法

这篇文章主要介绍了jsp文件绝对路径的设置方法,需要的朋友可以参考下
收藏 0 赞 0 分享

jsp与sql语句的混合使用示例

这篇文章主要介绍了jsp与sql语句的混合使用,需要的朋友可以参考下
收藏 0 赞 0 分享

jsp获取action传来的session和session清空以及判断

这篇文章主要介绍了jsp获取action传来的session和session清空以及判断,需要的朋友可以参考下
收藏 0 赞 0 分享

jsp简单自定义标签的forEach遍历及转义字符示例

这篇文章主要介绍了jsp简单自定义标签的forEach遍历及转义字符,需要的朋友可以参考下
收藏 0 赞 0 分享

jsp自定义标签之ifelse与遍历自定义标签示例

这篇文章主要介绍了jsp自定义标签之ifelse与遍历自定义标签,需要的朋友可以参考下
收藏 0 赞 0 分享

JSP加载JS文件不起作用的有效解决方法

jsp导入jquery文件,老是不起作用,原因在于其不能访问/WEB-INF/目录下的文件,下面有个不错的解决方法,大家可以参考下
收藏 0 赞 0 分享

Jsp中如何让图片在div中居中

这篇文章主要介绍了Jsp中如何让图片在div中居中的小技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

使用jsp调用javabean实现超简单网页计算器示例

这篇文章主要介绍了使用jsp和javabean实现超简单网页计算器示例,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多