您的位置:首页 > 理论基础 > 计算机网络

http请求中java中的302和sendRedirect的区别

2016-04-29 10:45 351 查看
============================================================================================

getContextPath、getServletPath、getRequestURI的区别

假定你的工程名称为projects,你在浏览器中输入请求路径:

http://127.0.0.1:8080/projects/pages/newForm.jsp

则执行下面向行代码后打印出如下结果:
1、 System.out.println(request.getContextPath());
打印结果:/projects
2、System.out.println(request.getServletPath());
打印结果:/pages/newForm.jsp
3、 System.out.println(request.getRequestURI());
打印结果:/projects/pages/newForm.jsp
4、 System.out.println(request.getRealPath("/"));
JSP servlet API提供了getRealPath(path)方法,返回给定虚拟路径的真实路径,如果转换错误,则返回null。

打印结果:C:\Tomcat5.0\webapps\projects\test

============================================================================================

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

点击(此处)折叠或打开

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优化非常有好处
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: