一、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 阅读(812)
评论(0) 编辑 收藏 所属分类:
J2EE基础