Java中转发和重定向再温习

本文详细介绍了Java中请求转发和请求重定向的区别与实现。请求转发是服务端内部操作,URL不变,而请求重定向是客户端发起新请求,URL会改变。SpringBoot中,请求转发可通过`request.getRequestDispatcher().forward()`实现,重定向使用`response.sendRedirect()`完成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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");
}
Java中的请求转发重定向都是用于在不同的Servlet之间进行页面跳转的方式,但它们的实现方式效果是不同的。 请求转发是指在当前Servlet中处理完请求后,将请求转发给另一个Servlet进行处理,转发后的请求由另一个Servlet来产生响应。请求转发的代码如下: ```java RequestDispatcher dispatcher = request.getRequestDispatcher("/b"); dispatcher.forward(request, response); ``` 其中,`/b`是要转发到的Servlet的路径,`request``response`是当前Servlet的请求响应对象,转发后的请求响应对象也是这两个对象。 请求转发的特点是:转发后的请求响应对象与原始请求响应对象是同一个,因此它们可以共享请求响应的信息,比如请求参数、请求属性等。此外,请求转发是在服务器端完成的,客户端并不知道发生了转发,因此地址栏中的URL不会改变。 重定向是指在当前Servlet中处理完请求后,将请求重定向到另一个Servlet进行处理,重定向后的请求由浏览器重新发起,由另一个Servlet来产生响应。重定向的代码如下: ```java response.sendRedirect("/b"); ``` 其中,`/b`是要重定向到的Servlet的路径,`response`是当前Servlet的响应对象。 重定向的特点是:重定向后的请求响应对象与原始请求响应对象是不同的,因此它们不能共享请求响应的信息。此外,重定向是在客户端完成的,因此地址栏中的URL会改变。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值