response.setStatus(302)和response.sendRedirect的区别
来源:互联网 发布:好用房产软件 编辑:程序博客网 时间:2024/06/01 10:46
response.sendRedirect("login.jsp");不等于response.addHeader("location", "login.jsp");response.setStatus(302);
1.比较
response.sendRedirect("login.jsp");的http请求过程如下:
response.addHeader("location", "login.jsp");
response.setStatus(302);
上面两个比较发现不同的是蓝色部分
response.sendRedirect("login.jsp");在重定向时多加了一段http://localhost:8080/xxxSearch/
2.分析
1)当我们浏览器的访问路径是http://localhost:8080/xxxSearch/时,
response.sendRedirect("login.jsp"); 等于 response.addHeader("location", "login.jsp");response.setStatus(302);
这时在jsp使用request.getContextPath()获取访问绝对路径是可以的
2)但是当我们的浏览器的访问路径是http://localhost/时就出现问题了
像我公司经常是这样的结构:用apache做前端,代理后面的tomcat,在tomcat看来访问路径还是http://localhost:8080/xxxSearch/,而用户真实访问的是http://localhost/
若是用response.sendRedirect("login.jsp");的话,用户会跳转到
http://localhost:8080/xxxSearch/login.jsp
若是我们的防火墙不开放8080端口,我们就会看到无法访问的页面,而且我们也不想客户直接访问到tomcat上。
而用response.addHeader("location", "login.jsp");response.setStatus(302);的话,客户会访问到login.jsp,这个路径是一个相对的路径再加上客户浏览器的路径,客户实际访问的是
http://localhost/login.jsp
3.结论
因此我认为:
尽量使用
response.addHeader("location", "login.jsp");response.setStatus(302);
而且在jsp页面里尽量不要使用request.getContextPath()或者绝对路径,
这样我们的代码可以很好的通过不同方式访问,特别是对SEO优化非常有好处
0 0
- response.setStatus(302)和response.sendRedirect的区别
- response.sendError() 和 response.setStatus()的区别
- response.sendRedirect()和request.getRequestDispatcher().forward(request,response)的区别
- response.sendRedirect()和request.getRequestDispatcher().forward(request,response)的区别
- response.sendRedirect()和request.getRequestDispatcher().forward(request,response)的区别
- response.sendRedirect()和request.getRequestDispatcher().forward(request,response)的区别
- response.sendRedirect()和request.getRequestDispatcher().forward(request,response)的区别
- response.sendRedirect() 和 dispatcher.forward(request,response)之间的区别
- response.sendRedirect() 和 dispatcher.forward(request,response)之间的区别
- response.sendRedirect()和request.getRequestDispatcher().forward(request,response)的区别
- request.getRequestDispatcher().forward(request,response)和response.sendRedirect()的区别
- response.sendRedirect() 和 dispatcher.forward(request,response)之间的区别
- request.getDispatcher().forward(request,response)和response.sendRedirect()的区别
- response.sendRedirect()和request.getRequestDispatcher().forward(request,response)的区别
- request.getRequestDispatcher().forward(request,response)和response.sendRedirect()的区别
- request.getRequestDispatcher().forward(request,response)和response.sendRedirect()的区别
- request.getRequestDispatcher().forward(request,response)和response.sendRedirect()的区别
- request.getRequestDispatcher().forward(request,response)和response.sendRedirect()的区别
- 字符串复制问题
- Hive体系结构
- Extjs5.0(6):控制器(Controller、ViewController)和路由器(Router)
- cookie & sessions
- recompile with -fPIC /usr/local/lib/libboost_python.a: could not read symbols: Bad value
- response.setStatus(302)和response.sendRedirect的区别
- UVA 1329 - Corporative Network
- vim中的visualmark.vim插件在使用mm就可以高亮当前行时提示“不能设定语言为en_US”的解决办法
- Hadoop在百度的应用--4000个节点的分布式集群
- python学习笔记——类
- OpenStack快速入门
- C#回顾2
- 【Java】JDK的下载、安装与部署
- [转载并修改]在Ubuntu上安装PPTP VPN服务