在java中,跳转的实现方式有两种:请求转发和请求重定向,下面对其进行温故,看看能否知新。
1、定义
- 请求转发:forward,发生在服务端程序内部,当服务端收到一个客户端的请求之后,会先将请求转发给目标地址,再将目标地址返回的结果转发给客户端。
如:张三(客户端)找李四(服务端)借钱,而李四没钱,于是李四又去找王五借钱,并把借来的钱借给了张三。整个过程张三只借了一次钱,剩下的事情都是李四完成的,这就是请求转发。 - 请求重定向:redirect,当服务端收到客户端的请求之后,会给客户端返回一个临时响应头,这个临时响应头中记录了客户端需要再次发送请求的url地址,客户端收到地址之后,会将请求发送到新的地址上。
如:张三(客户端)找李四(服务端)借钱,而李四没钱,于是李四就告诉张三,我没钱,你去王五那借钱,于是张三又去王五那借钱,这就是请求重定向。
2、请求方式
- 请求转发:是服务端的行为,服务端代替客户端发送请求,并将结果返回给客户端;
- 请求重定向:是客户端的行为;
3、请求和响应
- 请求转发:请求转发是服务端实现的,所以整个执行流程,客户端只需发送一次请求,因此整个只需流程使用的是同一个request和response;
- 请求重定向:请求重定向是客户端发送两次完全不同的请求,所以两次请求中使用的request和response是不同的;
4、最终URL地址
- 请求转发:是服务端代为请求,再将结果返回给客户端,所以请求的过程中URL地址是不变的;
- 请求重定向:是服务端告诉客户端,再次请求的地址,所以浏览器会重新再发送一次请求,因此客户端最终显示的URL也是最终跳转的地址;
5、代码实现
在springboot中的代码实现
- 请求转发:
@RequestMapping("/forward")
public void forward(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("/index.html").forward(request, response);
}
- 请求重定向:
@RequestMapping("/redirect")
public void redirect(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.sendRedirect("/index.html");
}