• 转发(forward):转发做了一次请求,浏览器的地址栏一直是第一次请求的地址。转发是服务器内部request/response控制权的移交。整个过程是一个请求,一个响应。

  • 重定向(redirect):重定向行为是做了两次请求,及产生了两个request对象,重定向会导致request对象信息丢失。两个请求,两个响应。

  • 区别:重定向是客户端行为,转发是服务器行为.重定向可以跨域访问,而转发是在web服务器内部进行的,不能跨域访问。

  • 过程:

    • 重定向:浏览器发出http请求 >> 服务器接受请求并发送302状态码和新的对应的url到浏览器 >> 浏览器接收响应并自动请求新的url >> 服务器接收请求并寻找客户所需的资源响应到浏览器。
    • 转发:浏览器发出http求其 >> 服务器接收请求 >> 服务器调用内部的一个方法在容器内完成请求处理和转发动作 >> 将客户所需资源发送到浏览器。
  • 调用方式:

    • 重定向:

      1).response.sendRedict(url);2).response.setState(302); response.setHeader(“location”,url);

    • 转发: 1).request.getRequestDispatcher(url).forward(request,response);2).request.getRequestDispatcher(url).include(request,response)

  • 总结:

    转发在服务器端完成的;重定向是在客户端完成的
    转发的速度快;重定向速度慢

    转发的是同一次请求;重定向是两次不同请求

    转发不会执行转发后的代码;重定向会执行重定向之后的代码

    转发地址栏没有变化;重定向地址栏有变化

    转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成