Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4173749
  • 博文数量: 291
  • 博客积分: 8003
  • 博客等级: 大校
  • 技术积分: 4275
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-30 18:28
文章分类

全部博文(291)

文章存档

2017年(1)

2013年(47)

2012年(115)

2011年(121)

2010年(7)

分类: Java

2012-05-25 10:11:46

java中有一个sendRedirect函数这个用于跳转到另外一个页面,这个实际上是一个302跳转,但是不完全等同于302跳转

点击(此处)折叠或打开

  1. response.sendRedirect("login.jsp");
  2. 不等于
  3. response.addHeader("location", "login.jsp");
  4. response.setStatus(302);
1.比较
response.sendRedirect("login.jsp");的http请求过程如下:
response.addHeader("location", "login.jsp");
response.setStatus(302);
上面两个比较发现不同的是蓝色部分
response.sendRedirect("login.jsp");在重定向时多加了一段

2.分析
1)当我们浏览器的访问路径是时,
response.sendRedirect("login.jsp");  等于 response.addHeader("location", "login.jsp");response.setStatus(302);
这时在jsp使用request.getContextPath()获取访问绝对路径是可以的
2)但是当我们的浏览器的访问路径是时就出现问题了
像我公司经常是这样的结构:用apache做前端,代理后面的tomcat,在tomcat看来访问路径还是,而用户真实访问的是
若是用response.sendRedirect("login.jsp");的话,用户会跳转到
login.jsp
若是我们的防火墙不开放8080端口,我们就会看到无法访问的页面,而且我们也不想客户直接访问到tomcat上。
而用response.addHeader("location", "login.jsp");response.setStatus(302);的话,客户会访问到login.jsp,这个路径是一个相对的路径再加上客户浏览器的路径,客户实际访问的是
login.jsp

3.结论
因此我认为:
尽量使用
response.addHeader("location", "login.jsp");response.setStatus(302);
而且在jsp页面里尽量不要使用request.getContextPath()或者绝对路径,
这样我们的代码可以很好的通过不同方式访问,特别是对SEO优化非常有好处
阅读(16101) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

kenvifire2012-05-27 21:26:34

"java中有一个sendRedirect函数",这句话有问题,sendRedirect是servlet规范里对http协议的实现,并不是java一个函数。而且302也不是java里的,是http协议的,建议了解一下java,servlet规范,以及HTTP协议。