转发forward和重定向redirect

转发forward:
转发只是一次请求并且是Web服务器内部进行资源跳转,而且浏览器地址栏上的路径也不会改变

@WebServlet(urlPatterns = "/aaa")
public class Demo extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //从当前的请求路径跳转到处理bbb请求的servlet下
        request.getRequestDispatcher("/bbb").forward(request,response);
    }
}

也就是说当前的servlet收到请求自己并不做出响应而是转发给了处理请求bbb的servlet来对请求做出响应

重定向redirect:
重定向就是当客户端发送一个请求之后,服务器给浏览器一个响应告诉客户端请求路径改变需要再发一个请求,重定向会发送一个请求

//发送重定向响应  默认为临时重定向
        response.sendRedirect(request.getContextPath()+"/bbb");

客户端浏览器会收到如下响应
HTTP/1.1 302 Found
Location: /bbb
浏览器会重新发送一个请求路径是request.getContextPath()+"/bbb"的请求

重定向分两种临时重定向响应状态码是302和永久重定向响应状态码是301

        //发送重定向响应 默认发送的是临时重定向 响应状态码为302
        response.sendRedirect(request.getContextPath()+"/bbb");
        
        //        设置响应状态码为301  永久重定向
        response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
        response.setHeader("Location","/bbb");

浏览器客户端收到的响应内容变成下面这样了:
HTTP/1.1 301 Found
Location: /bbb

转发和重定向的相同点和不同点:
相同点:都可以完成资源的跳转 该资源值得是所有的web资源包括静态资源
不同点:转发是请求对象触发的而重定向是响应对象触发的,转发是一次请求在 浏览器地址栏上不会变化,重定向是两次请求浏览器地址栏上的地址会改变,重定向可以跨服务器跳转资源而转发只能在服务器内部跳转

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值