JSP的相对路径如何计算深入研究
2023-06-13 09:15:06 时间
问题描述:
要在/jsp/index.jsp文件使用图片,如何计算相对路径?经过Servlet,struts转发后又如何计算相对路径?
目录结构:
应用名字:Demo
demo
----webroot
----images
----go.gif
----jsp
----index.jsp
----css
------------------------------------------------------------------------------
第一种情况:直接访问JSP文件
URL是http://localhost/Contextpath/jsp/index.jsp
要在index.jsp引用go.gif文件:
1、使用决对路径
<imgsrc="<%=request.getContextPath()%>/images/go.gif"/>
浏览器寻找方式:域名+/Contextpath/images/go.gif,可找到。
2、使用相对路径
<imgsrc="../images/go.gif"/>
浏览器寻找方式:通过地址栏分析,index.jsp所在目录(jsp)的上一层目录(WebRoot)下的images/go.gif文件。
3、使用basehref
写<%=request.getContextPath()%>太麻烦,可以在每一个jsp文件顶部加入以下代码
<%Stringpath=request.getContextPath();StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><basehref="<%=basePath%>">
<imgsrc="images/go.gif"/>
浏览器寻找方式:basePath的值http://localhost/Contextpath/再加上images/go.gif,可找到。
------------------------------------------------------------------------------
第二种情况:servlet转发到jsp
1、使用相对路径
URL是http://localhost/Contextpath/servlet_2(转发到/jsp/index.jsp)
错误:
根据/jsp/index.jsp路径计算,得到<imgsrc="../images/go.gif"/>
正确:
<imgsrc="images/go.gif"/>
原因:
index.jsp是保存在服务器端的/jsp/index.jsp目录下面,但通过转发后浏览器并不知道/jsp/目录的存在,因为地址栏中没有体现出来。所以服务器端/jsp/目录并不会对相对路径产生影响
浏览器寻找方式:通过地址栏分析http://localhost/Contextpath/servlet_2,相对于servlet_2所在目录(/)下面找到images/go.gif文件
2、使用相对路径
URL是http://localhost/Contextpath/servlet/ser/ser/servlet_1(转发到/jsp/index.jsp)
“/servlet/ser/ser/servlet_1是在web.xml文件配置的
错误:
根据/jsp/index.jsp路径计算,得到<imgsrc="../images/go.gif"/>
正确:
<imgsrc="../../../images/go.gif"/>
原因:
index.jsp是保存在服务器端的/jsp/index.jsp目录下面,但通过转发后浏览器并不知道/jsp/目录的存在,因为地址栏中没有体现出来。所以服务器端/jsp/目录并不会对相对路径产生影响
浏览器寻找方式:通过地址栏分析http://localhost/Contextpath/servlet/ser/ser/servlet_1,相对于servlet_1所在目录(ser)的上一层目录的上一层目录的上一层目录(/)下的images/go.gif文件
3、使用决对路径
<imgsrc="<%=request.getContextPath()%>/images/go.gif"/>
------------------------------------------------------------------------------
总结:相对路径是由浏览器通过地址栏分析出来的,与服务器端文件的存放路径没有关系,由其是使用Servlet,struts转发到某jsp文件后,某jsp在服务器端存放的位置是/a/b/c/d/f/g.jsp,但经过Servlet,struts转发后,浏览器的地址栏可不一定是/a/b/c/d/f/这样的层次。所以相对路径的计算以浏览器地址栏为准。
struts2中可以使用命名空间,来保证浏览器地址栏中的目录层次与服务器端目录层次的一致性,这样程序员通过服务器端的目录层次计算相对路径,在浏览器中也是正常的。
但我们理解了原理,就算不使用命名空间,自己也有强大的控制力。
要在/jsp/index.jsp文件使用图片,如何计算相对路径?经过Servlet,struts转发后又如何计算相对路径?
目录结构:
应用名字:Demo
demo
----webroot
----images
----go.gif
----jsp
----index.jsp
----css
------------------------------------------------------------------------------
第一种情况:直接访问JSP文件
URL是http://localhost/Contextpath/jsp/index.jsp
要在index.jsp引用go.gif文件:
1、使用决对路径
<imgsrc="<%=request.getContextPath()%>/images/go.gif"/>
浏览器寻找方式:域名+/Contextpath/images/go.gif,可找到。
2、使用相对路径
<imgsrc="../images/go.gif"/>
浏览器寻找方式:通过地址栏分析,index.jsp所在目录(jsp)的上一层目录(WebRoot)下的images/go.gif文件。
3、使用basehref
写<%=request.getContextPath()%>太麻烦,可以在每一个jsp文件顶部加入以下代码
<%Stringpath=request.getContextPath();StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><basehref="<%=basePath%>">
<imgsrc="images/go.gif"/>
浏览器寻找方式:basePath的值http://localhost/Contextpath/再加上images/go.gif,可找到。
------------------------------------------------------------------------------
第二种情况:servlet转发到jsp
1、使用相对路径
URL是http://localhost/Contextpath/servlet_2(转发到/jsp/index.jsp)
错误:
根据/jsp/index.jsp路径计算,得到<imgsrc="../images/go.gif"/>
正确:
<imgsrc="images/go.gif"/>
原因:
index.jsp是保存在服务器端的/jsp/index.jsp目录下面,但通过转发后浏览器并不知道/jsp/目录的存在,因为地址栏中没有体现出来。所以服务器端/jsp/目录并不会对相对路径产生影响
浏览器寻找方式:通过地址栏分析http://localhost/Contextpath/servlet_2,相对于servlet_2所在目录(/)下面找到images/go.gif文件
2、使用相对路径
URL是http://localhost/Contextpath/servlet/ser/ser/servlet_1(转发到/jsp/index.jsp)
“/servlet/ser/ser/servlet_1是在web.xml文件配置的
错误:
根据/jsp/index.jsp路径计算,得到<imgsrc="../images/go.gif"/>
正确:
<imgsrc="../../../images/go.gif"/>
原因:
index.jsp是保存在服务器端的/jsp/index.jsp目录下面,但通过转发后浏览器并不知道/jsp/目录的存在,因为地址栏中没有体现出来。所以服务器端/jsp/目录并不会对相对路径产生影响
浏览器寻找方式:通过地址栏分析http://localhost/Contextpath/servlet/ser/ser/servlet_1,相对于servlet_1所在目录(ser)的上一层目录的上一层目录的上一层目录(/)下的images/go.gif文件
3、使用决对路径
<imgsrc="<%=request.getContextPath()%>/images/go.gif"/>
------------------------------------------------------------------------------
总结:相对路径是由浏览器通过地址栏分析出来的,与服务器端文件的存放路径没有关系,由其是使用Servlet,struts转发到某jsp文件后,某jsp在服务器端存放的位置是/a/b/c/d/f/g.jsp,但经过Servlet,struts转发后,浏览器的地址栏可不一定是/a/b/c/d/f/这样的层次。所以相对路径的计算以浏览器地址栏为准。
struts2中可以使用命名空间,来保证浏览器地址栏中的目录层次与服务器端目录层次的一致性,这样程序员通过服务器端的目录层次计算相对路径,在浏览器中也是正常的。
但我们理解了原理,就算不使用命名空间,自己也有强大的控制力。
相关文章
- 手摸手入门JSP基础语法
- Java Web(五) JSP详解(四大作用域九大内置对象等)编程语言
- jsp处理 日期详解编程语言
- JSP动作
- JSP jsp:getProperty:数据获取标签
- JSP jsp:setProperty:属性值设定标签
- JSP Request.getRequestURL()方法:获得客户端访问网站的绝对路径
- JSP Request.getUserPrincipal()方法:返回java.security.Principal对象
- JSP Response.containsHeader()方法:判断指定名字的HTTP文件头是否已经存在
- JSP JSTL <fmt:formatDate>标签:格式化时间
- 开发MySQL JSP编程建设精彩网站(jspmysql网站)
- JSP实现图片上传存入MySQL(jsp上传图片mysql)
- JSP搭建MySQL数据库连接测试(jsp测试连接mysql)
- 使用JSP与MySQL实现数据库连接(jsp和mysql连接)
- JSP与MySQL实现登录系统(jsp mysql 登陆)
- 长站长如何使用JSP和Oracle搭建网站(jsp oracle的站)
- 利用JSP及Oracle搭建文件管理系统(jsp oracle文件)
- JSP和Oracle结合快速搭建Web应用框架(jsp oracle搭建)
- MySQL下载JSP学习JSP编程的必备数据库工具(mysql下载jsp)
- JSP入门教程(2)
- JSP由浅入深(1)——熟悉JSP服务器
- jsp传值中文乱码问题解决方法示例介绍