RequestDispatcher.forward() 方法和HttpServletResponse.sendRedirect()方法的区别

本文解析了服务器端跳转(RequestDispatcher.forward())与客户端跳转(response.sendRedirect())的区别。服务器端跳转不会改变浏览器URL,客户端跳转则会。服务器端跳转可以共用同一个request对象,而客户端跳转则不能。

RequestDispatcher.forward()是服务器端跳转  response.sendRedirect()是客户端跳转

 

服务器端跳转的话,你的浏览器上的URL是不会改变的,比如你请求的是一个LoginServlet,要登入到main.jsp,这样的话,你的浏览器的url还是LoginServlet,
而客户端跳转的话,你的URL会是你要跳转去的页面地址:main.jsp;
服务器端跳转,同用一个request,而客户端跳转则不能共用一个request。


转载至:http://www.cnblogs.com/liukunjava/p/5823918.html

### `RequestDispatcher` 与 `forward` 的区别 在 Java Web 开发中,`RequestDispatcher` 是一个接口,用于将请求分发到其他资源,如 Servlet、JSP 或 HTML 页面。而 `forward()` 是 `RequestDispatcher` 接口的一个方法,用于将请求响应对象传递给另一个资源进行处理。因此,`forward()` 是 `RequestDispatcher` 的一个具体操作,而不是与之并列的概念。 #### 1. `RequestDispatcher` 的作用 `RequestDispatcher` 提供了两种主要方法:`forward()` `include()`,分别用于请求的转发包含。它负责在服务器端将请求导向其他资源,并保持请求响应对象的完整性。例如: ```java RequestDispatcher dispatcher = request.getRequestDispatcher("/target.jsp"); dispatcher.forward(request, response); ``` 该接口支持路径的解析,可以是相对路径或绝对路径。如果路径以 `/` 开头,则相对于当前 Web 应用的根目录;否则,相对于当前请求的 URL [^4]。 #### 2. `forward()` 方法的功能 `forward()` 方法的作用是将当前的请求响应对象传递给另一个资源进行处理。调用 `forward()` 后,控制权完全交给目标资源,原始的 Servlet 不会继续执行后续代码。这种方式适用于需要将请求完全交给另一个资源处理的场景,如 MVC 架构中的视图渲染 [^1]。 ```java protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setAttribute("message", "Hello from Forward"); RequestDispatcher dispatcher = request.getRequestDispatcher("/welcome.jsp"); dispatcher.forward(request, response); } ``` 在上述代码中,`welcome.jsp` 页面可以直接访问 `request` 对象中的 `message` 属性。 #### 3. `forward()` 与 `RequestDispatcher` 的关系 `forward()` 是 `RequestDispatcher` 接口的一个方法,用于实现请求的转发。因此,`RequestDispatcher` 是一个更广泛的接口,包含了 `forward()` `include()` 两种操作。`RequestDispatcher` 负责获取目标资源,而 `forward()` 则负责执行转发操作 [^3]。 #### 4. `forward()` 与 `sendRedirect()` 的区别 `forward()` 与 `HttpServletResponse.sendRedirect()` 有显著的区别。`forward()` 是服务器端的请求转发,浏览器地址栏不会发生变化,请求响应对象在转发过程中保持不变。而 `sendRedirect()` 是客户端的重定向,浏览器会发起新的请求,导致地址栏变化,并且无法共享 `request` 中的数据 [^2]。 ```java // 使用 sendRedirect 进行重定向 response.sendRedirect("/app/newpage"); ``` 在 `sendRedirect()` 中,客户端会发起新的请求,因此无法访问原始请求中的 `request` 数据。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值