posts - 262,  comments - 221,  trackbacks - 0

一、Forward与Redirect与<a href >的路径区别

forward的路径如果是以"/"开头,则表示相对Web应用的context, 如果不是则表示相对于当前请求
redirect的路径如果是以"/"开头,则表示相对于主机, 如果不是则表示相对于当前请求
<a href>的路径如果是"/"开头,则表示相对于主机,如果不是则表示相对于当前请求

二、Forward与Redirect对HTML链接的影响

最近在写一个JSP页面时,碰到一个奇怪的问题,有一个页面(forward_from.jsp)根据一个随机数选择“转发”或“重定向”到第二个页面(forward_result.jsp),在第二个页面有一个返回的链接:<a href = "../forward_from.jsp">。

测试时发现如果第一个页面是“重定向”到第二个页面的,则当用户点击第二个页面的返回链接时一切正常,当如果是以“转发”的方式访问第二个页面,当用户点击返回链接会出现“404: File not found”的错误。

·页面结构




当从forward_from.jsp“重定向”到forward_result.jsp时,浏览器的地址栏的URL是:

http://localhost:8081/j2eeTestProject/pages/forward/forward_result.jsp

当从forward_from.jsp“转发”到forward_result.jsp时,浏览器的地址栏的URL是:

http://localhost:8081/j2eeTestProject/pages/forward_from.jsp


当从forward_from.jsp“重定向”到forward_result.jsp时,forward_result.jsp页面的返回链接<a href = "../forward_from.jsp">是:

http://localhost:8081/j2eeTestProject/pages/forward_from.jsp

当从forward_from.jsp“转发”到forward_result.jsp时,forward_result.jsp页面的返回链接<a href ="../forward_from.jsp">是:

http://localhost:8081/j2eeTestProject/forward_from.jsp

从上面的浏览器URL和页面的链接写法我们就可以看出问题所在,因为<a href = "../forward_result.jsp">参考的是Web浏览器中地址栏的URL,当“转发”时因为浏览器的URL地址保持不变,所以“../”就被浏览器解析成:/j2eeTestProject/,而“重发”时因为浏览器的URL地址是真正页面的地址(/pages/forward/forward_result.jsp),所以../被浏览器解析成:/j2eeTestProject/pages/。而这个路径显然是不存在的。

总结:以后在JSP中尽量不要使用"../"这样的写法,我们可以使用request.getServletContext()或request.getServletPath()来定位到Web应用的根目录或当前的请求对象。



-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要尽力打好一手烂牌。
posted on 2008-01-15 23:28 Paul Lin 阅读(763) 评论(0)  编辑  收藏 所属分类: J2EE基础

只有注册用户登录后才能发表评论。


网站导航:
 
<2008年1月>
303112345
6789101112
13141516171819
20212223242526
272829303112
3456789

常用链接

留言簿(19)

随笔分类

随笔档案

BlogJava热点博客

好友博客

搜索

  •  

最新评论

阅读排行榜

评论排行榜