Java 中Redirect和Forward

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/testd

GET /test/testd HTTP/1.1
Host: localhost:7080
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1

 HTTP/1.1 302
Location: redirect
Content-Length: 0
Date: 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);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值