key: 转发是服务端行为 重定向是客户端行为
结合上述图像可以更深刻的读懂下述文字
请求转发(Forward):发生在服务端程序内部,当服务端收到一个客户端的请求之后,会先将请求转发给目的地址,最后再将目的地址返回的结果转发给客户端。客户端并不知情其中内部发生的事情。
请求重定向(Redirect):请求重定向指的是服务端接收到客户端的请求之后会给客户端一个临时响应头,这个响应头中记录了客户端需要再次发送请求的URL地址,客户端收到URL地址后,会将请求再次发送到这个新的地址上。
从上面请求转发和请求重定向的定义,我们可以看出:请求转发是服务器端的行为,服务器端代替客户端发送请求,并将结果返回给客户端;而请求重定向是客户端的行为,它们的交互流程,如上图所示。
请求转发是服务端实现的,所以整个执行的流程中,客户端只需要发送一次请求,因此整个交互的过程中使用的都是同一个Request请求对象的一个Resspone响应的对象,在整个请求的过程中,请求和返回的数据是共享的。而请求重定向客户端发送两次完全不同的请求,所以两次请求中的数据是不同的。
请求转发是服务端代为请求,再将结果返回客户端,整个URL地址不变。重定向是发送两次不同的请求,所以最终跳转的地址并非刚开始请求的地址,所以URL地址发生变化。
//转发
@RequestMapping("/fw")
public void forward(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("/index.html").forward(request, response);
}
//重定向
@RequestMapping("/rt")
public void redirect(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.sendRedirect("/index.html");
}
借鉴 :https://www.51cto.com/article/714188.html