Java 中Redirect和Forward

来源:互联网 发布:人工智能不会取代人类 编辑:程序博客网 时间:2024/06/07 02:29

Java中连接跳转的2中方式RedirectForward
- (重定向)Redirect

重定向是把request 直接转到其他组件处理,response.sendRedirect()后,response已经提交,不能再对response操作。
一个简单的重定向

response.sendRedirect("redirect");

这个应该和下面的代码一样的效果:

        response.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);        String newLocn = request.getServletContext().getContextPath()+"/redirect";        response.setHeader("Location",newLocn);

查看header:

http://localhost:7080/test/testdGET /test/testd HTTP/1.1Host: localhost:7080User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: en-US,en;q=0.5Accept-Encoding: gzip, deflateConnection: keep-aliveUpgrade-Insecure-Requests: 1 HTTP/1.1 302Location: redirectContent-Length: 0Date: Mon, 26 Jun 2017 09:15:23 GMT

浏览器手动302后,对 redirect发起请求,一个重定向,浏览器发了2次请求。
默认的response.sendRedirect返回的是302,即使我在上面设置status code最后也返回302。(Tomcat 8.5中测试)
如果想返回301,只能手动设置了:

        response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);        String newLocn = request.getServletContext().getContextPath()+"/redirect";        response.setHeader("Location",newLocn);

301和302的区别:
301是永久性的,302是临时性的,301对爬虫有作用,爬虫对301直接更新原来的url。

  • (转发)Forward

转发是把请求的内容直接写到当前的response里面,不会要求浏览器重新发request

request.getRequestDispatcher("/redirect").forward(request, response);
原创粉丝点击