当前位置: 首页 > 图文教程 > 网络编程 > JSP > JSP、Servlet中的相对路径和绝对路径

JSP
GET 方式提交的含有特殊字符的参数
java big5到gb2312的编码转换
java Lucene 中自定义排序的实现
hibernate中的增删改查实现代码
jsp 定制标签(Custom Tag)
jsp基础速成精华讲解
IE cache缓存 所带来的问题收藏
关于JSP的一点疑问小结
JSP 多条SQL语句同时执行的方法
jsp include文件时的一个乱码解决方法
在JSTL EL中处理java.util.Map,及嵌套List的情况
jsp 页面显示的一些用法
根据Hibernte的cfg文件生成sql文件
五种 JSP页面跳转方法详解
JSP 防范SQL注入攻击分析
JSP 连接MySQL配置与使用
java eclipse 启动参数
jsp 页面上图片分行输出小技巧
解决jsp开发中不支持EL问题
JSP 页面中使用FCKeditor控件(js用法)

JSP、Servlet中的相对路径和绝对路径


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-13   浏览: 276 ::
收藏到网摘: n/a

JSP和Servlet中的绝对路径和相对路径问题困扰了我好几天,经过努力之后将其部分心得和大家共享。

前提:假设你的Http地址为http://192.168.0.1/你的web应用为webapp,那么你的web应用URL为http://192.168.0.1/webapp/

web应用的目录结构:

webapp/

web-inf/

classes/

lib/

web.xml

 

handleservlet

/handleservlet此映射是相对于当前web应用的

 

user/

a.jsp

b.jsp

images/

css/

js/

 

所有相对路径都是由“/”开头的。如:/image/a.gif,/user/main.jsp,大家知道在html中的相对路径是这样的:

有个html文件:a.html,其中有,其中href属性表示引用的css文件的路径。

one.css:表示one.css和a.hmtl处于同一个目录

user/one.css:表示one.css处于a.html所在目录的子目录user中。

../one.css:表示one.css位于a.hmtl上一级目录下,

../../one.css:表示one.css位于a.hmtl上一级目录的上一级目录下,

./:表示和a.hmtl同一目录

我们称上述相对路径为html相对路径

1、服务器端的地址

服务器端的相对地址指的是相对于你的web应用的地址,这个地址是在服务器端解析的(不同于html和javascript中的相对地址,他们是由客户端浏览器解析的)也就是说这时候在jsp和servlet中的相对地址应该是相对于你的web应用,即相对于http://192.168.0.1/webapp/的。

其用到的地方有:

forwarder:servlet中的request.getRequestDispatcher(address);这个address是在服务器端解析的,所以,你要forwarder到a.jsp应该这么写:request.getRequestDispatcher(“/user/a.jsp”)这个/相对于当前的web应用webapp,其绝对地址就是:http://192.168.0.1/webapp/user/a.jsp。

sendRedirect:在jsp中

2、客户端的地址

所有的html中的相对地址都是相对于http://192.168.0.1/的,而不是http://192.168.0.1/webapp/的。

Html中的form表单的action属性的地址应该是相对于http://192.168.0.1/的,所以,如果提交到a.jsp为:action=”/webapp/user/a.jsp”;提交到servlet为action=”/webapp/handleservlet”

Javascript也是在客户端解析的,所以其相对路径和form表单一样。

3、站点根目录和css路径问题

我们称类似这样的相对路径/webapp/….为相对于站点根目录的相对路径。

当在jsp中引入css时,如果其相对路径相对于当前jsp文件的,而在一个和这个jsp的路径不一样的servlet中forwarder这个jsp时,就会发现这个css样式根本没有起作用。这是因为在servlet中转发时css的路径就是相对于这个servlet的相对路径而非jsp的路径了。所以这时候不能在jsp中用这样的路径:或者类似href="one.css"和../../one.css的html相对路径是相对于引用这个css的文件的相对路径。而在servlet中转发时就是相对于这个servlet的相对路径了,因为jsp路径和servlet路径是不一样的,所以这样的引用肯定是出错的。

所以这个时候,要用站点根目录,就是相对于http://192.168.0.1/的目录,以“/”开头。

因此上述错误应更正为href=”/webapp/one.css”类似的站点根目录的相对目录。这样在servlet转发后和jsp中都是相对于站点根目录的相对路径,就能正确使用所定义的css样式了。