作者:赵磊
博客: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/
分享到:
相关推荐
JSP的相对路径深入研究 资源源于不但搜索,自由源于不但努力
JSP相对路径的练习JSP相对路径的练习
jsp案例---端午节jsp案例---端午节jsp案例---端午节jsp案例---端午节jsp案例---端午节jsp案例---端午节
jsp-api-2.2-sources.jar
jsp-api-2.1.jar jspAPI文档欢迎下载
javax.servlet.jsp-api-2.3.2的jar包
javax.servlet.jsp-api-2.3.1.jar
import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.TagSupport; 所导致的无包报错解决jar包 注意导入jar包时应注意Servlet的版本,如果是Servlet 2.4 对应的应该是JSP 2.0 的jar包,如果是...
jakarta.servlet.jsp.jstl-api-2.0.0.jar
jsp页面路径问题,request.getcontentType.;request.getscheme;request.getServerName
jsp-api-2.1-sources.jar
Jsp-Order-online+javaweb 网上点餐项目Jsp-Order-online+javaweb 网上点餐项目Jsp-Order-online+javaweb 网上点餐项目Jsp-Order-online+javaweb 网上点餐项目Jsp-Order-online+javaweb 网上点餐项目Jsp-Order-on...
jsp基础知识--jspapi jsp基础知识--jspapi jsp基础知识--jspapi
绝对路径与相对路径.DOC文件.....
javax.servlet.jsp.jstl-api-1.2.1.jar
很好帮助理解路径问题,供大家参考使用.....................
jsp-api-2.0jsp-api-2.0jsp-api-2.0jsp-api-2.0
jsp-api-2.0-sources.jar maven仓库竟然找不到。
jsp-api-2.2.1-sources 源码