`

Servlet中请求转发和重定向的原理及区别

阅读更多

1、定义

 

    1Forward(请求转向):服务器程序内部请求转向,这个特性允许前一个程序用于处理请求,而后一个程序用来返回响应。

    2Redirect(重定向):服务端发送给客户端一个重定向的临时响应头,这个响应头包含重定向之后的URL,客户端用新的URL重新向服务器发送一个新的请求。

 

2、定义简单理解

 

   1)请求转发只是把请求转发给服务器上(通常是同一个Web应用中)的另一个组件(ServletJsp等)。

    2)重定向则只是告诉客户(浏览器)去访问另一个URL(可能是同一个Web站点甚至其他站点)。

 

3、本质区别

 

    1)请求转发发生在服务器端,由服务器(比如servlet)控制。

    2)重定向发生在客户端,由客户(通常是浏览器)控制。

 

4、请求和响应次数

 

    1)请求转发过程在同一个请求当中完成,只会返回一个响应。

    2)重定向过程则发生在两个不同的请求中,会返回两个不同响应。

 

5、基于第4点,进一步分析

 

    1)请求转发后可以在服务器端获取本次请求对象上保存的信息(比如在Servlet中将用户名保存到当前request对象中,转发给另一组件(如JSP)后,另一组件可以通过request对象取得用户名信息)。

    2)请求转发后,浏览器地址栏URL不会发生改变。

    3)重定向后则无法在服务器端获取第一次请求对象上保存的信息(比如还是在Servlet中将用户名保存到当前request对象中,并重定向到一个新的URL,然后在新URL指向的地址中(比如还是某个Servlet)就无法获取原先保存在第一个请求中的信息。很明显,用户名是保存在第一次请求的对象中,但并没有保存在本次(第二次)请求的对象中)。

    4)重定向后,浏览器地址栏URL变为新的URL(因为浏览器确实给新的URL发送了一个新的请求)。

 

6、服务器端调用的方法

 

    1)请求转发使用RequestDispatcher对象的forward()include()方法(他们的区别可参考:Servlet中请求转发时forword()include()的区别)。

    2)重定向则使用HttpServletResponse对象的sendRedirect()方法。

 

7、基于第6点,进一步分析

 

    1)RequestDispatcher对象是通过调用HttpServletRequest对象的getRequestDispatcher()方法得到的,所以forward()include()本质来说是属于请求对象的方法,所以请求转发始终发生在一个请求当中。

    2)sendRedirect()方法HttpServletResponse对象的方法,即响应对象的方法。既然调用了响应对象的方法,就表示本次请求过程已经结束了,服务器即将向客户端返回本次请求的响应了。事实上,服务器确实返回了一个状态码为“302”,首部“Location”值为新的URL的响应。然后浏览器就会根据“Location”首部指定的URL,重新发起一次新的请求,转向这个目标页面,所以重定向实际上发生在两个不同的请求当中。

 

8、sendRedirect()forword()中使用相对URL分析(站点为http://localhost:8080/Web应用为MyApp)

 

    1)sendRedirect(URL):如果使用”/”开头,则表示相对于整个Web站点的根目录,如使用sendRedirect(“/foo/myHtml.html”)时,容器建立的完整URL为:http://localhost:8080/foo/myHtml.html。否则,就表示相对于当前目录。

    2)request.getRequestDispatcher(URL).forward(req,res):如果使用”/”开头,则表示相对于当前Web应用的根目录,而非整个Web站点的根目录,如使用request.getRequestDispatcher(/foo/myHtml.html).forward(req,res)时,容器会建立绝对(完整)的URL为:http://localhost:8080/MyApp/foo/myHtml.html否则,同样表示相对于当前目录。

 

9、跳转时机(有待考究

 

    1)请求转发执行到跳转语句后马上无条件跳转,之后的代码不再执行。

    2)重定向则会在所有代码执行完毕后跳转,但不能再向response中写入任何数据。(可以在重定向跳转后加上return语句,实现马上跳转)

 

10、执行时机(相同点)

 

    1)请求转发和重定向方法都必须在响应提交(刷新响应正文输出到流中)之前执行,否则会抛出IllegalStateException异常。

    2)在转发或重定向之前,响应缓冲区中未提交的数据会被自动清除。

 

11、响应速度(理论上)

 

    1)请求转发相对快:因为请求转发过程在同一请求中。

    2)重定向相对慢:因为重定向过程发生在两个不同的请求中。

 

分享到:
评论

相关推荐

    请求转发与重定向的区别

    2. 实践编程:通过编写实际的Servlet或Filter来实现请求转发和重定向,这能帮助你更好地掌握它们的用法和区别。 3. 分析案例:研究不同应用场景下,何时选择请求转发,何时选择重定向,这有助于你在实际工作中做出...

    请求转发与重定向

    在Web开发中,**请求转发**与**重定向**是两种非常重要的控制流程技术,它们都用于实现页面跳转的功能,但其工作原理和应用场景有所不同。 #### 二、请求转发 ##### 1. 定义 **请求转发**是在服务器内部进行的,它...

    转发和重定向的区别

    在Web开发中,"转发"(Forward)和"重定向"(Redirect)是两种常见的页面跳转方式,它们虽然在效果上看似相似,但其实有着本质的区别。理解这两种技术的工作原理及其应用场景对于优化应用程序的性能和用户体验至关...

    java servlet请求转发重定向

    ### Java Servlet 请求转发与重定向详解 #### 一、引言 在Java Web开发中,请求转发和重定向是两种非常重要的技术手段,用于控制页面之间的跳转逻辑。这两种技术虽然都能实现页面间的跳转,但其工作原理、应用场景...

    请求转发和重定向的区别共1页.pdf.zip

    在Web开发中,请求转发和重定向是两种常见的服务器端处理客户端请求的技术,它们虽然都是用来改变客户端浏览器的页面展示,但实现机制和效果却大相径庭。本篇文章将详细解析请求转发与重定向的区别。 一、请求转发...

    JavaWeb中的 请求转发 和 重定向.docx

    在JavaWeb开发中,请求转发和重定向是两种常见的客户端请求处理方式,它们都是用于将一个请求从一个Servlet传递到另一个Servlet或者从一个资源跳转到另一个资源。这两种方法虽然都可以实现页面间的跳转,但它们的...

    转发与重定向的详细说明

    例如,在一个基于MVC架构的系统中,用户请求可能首先被控制器(如Servlet)接收,控制器处理业务逻辑后,可能会选择将请求转发给视图层(如JSP页面),以便呈现最终的用户界面。 **2. 实现方式** 转发可以通过`...

    java 转发和重定向区别及实例代码

    在Java Web开发中,转发(Forward)和重定向(Redirect)是两种常见的URL导航技术,它们都是用来在多个页面间转移控制权,但其工作原理和应用场景有所不同。 **转发(Forward)** 转发是服务器端的操作,它发生在同...

    java web-转发、重定向(csdn)————程序.pdf

    在Java Web开发中,转发(Forward)和重定向(Redirect)是两种常见的请求处理方式,它们在处理客户端请求和服务器响应时有着不同的机制和应用场景。 1. **转发(Forward)** - **原理**:转发是在服务器端内部...

    servlet的几种实例

    在这个例子中,Servlet会演示如何使用`RequestDispatcher`进行请求转发和重定向。转发是在服务器端完成的,而重定向则会让客户端发起新的请求。两者都是控制用户请求流向的重要手段。 6. **servlet-test6:Servlet...

    7.Servlet请求和响应(1).zip

    本资源包“7.Servlet请求和响应”是专为初学者设计的,旨在深入理解Servlet的工作原理以及如何在实际应用中使用它们。 首先,我们来详细探讨Servlet的基本概念。Servlet是一个Java类,遵循Servlet接口,由服务器...

    java web servlet实例

    Servlet可以使用`RequestDispatcher`进行请求转发或重定向。转发是服务器内部操作,而重定向是客户端发起新的请求。例如: ```java RequestDispatcher dispatcher = req.getRequestDispatcher("/anotherPage.jsp...

    servlet中文帮助文档CHM格式

    5. **转发和重定向**:`RequestDispatcher`接口提供了`forward()`和`redirect()`方法,用于在服务器端将请求从一个资源转向另一个资源。 6. **多线程模型**:Servlet默认在每个请求上创建一个新的线程,理解这一...

    servlet教程 servlet教程 servlet教程

    在Servlet中,转发和重定向是两种常见的导航方式。转发是在服务器端完成的,请求被传递给另一个资源,客户端浏览器并不知道这个过程;而重定向则会告知客户端浏览器去访问新的URL,浏览器会发起一个新的请求。 此外...

    webproject1_servlet_

    6. **请求转发和重定向**:Servlet通过请求转发或重定向来控制页面跳转。 总之,"Webproject1_servlet_"是一个学习和实践Servlet技术的好例子,它涵盖了Web开发中的基本概念,如HTTP请求处理、动态内容生成、用户...

    练习servlet

    在“练习Servlet”的过程中,你可能还会接触到MVC(Model-View-Controller)设计模式,这是Web开发中常见的架构模式,Servlet通常作为Controller的角色,负责接收请求、处理数据并调用模型和视图。 总的来说,...

    JSP和Servlet公司培训课件

    3. 掌握请求转发和重定向的区别。 4. 实践MVC设计模式,理解其工作原理。 5. 练习使用JSP和Servlet构建实际项目,例如用户登录、注册、商品展示等。 通过这个公司的培训课件,你可以系统地学习和练习这些概念,提升...

    韩顺平servlet笔记.rar下载

    4. **转发与重定向**:Servlet可以使用`RequestDispatcher`进行请求转发或重定向。转发是在服务器端内部完成,保持一次HTTP请求;重定向则是客户端发起新的HTTP请求,地址栏会显示新的URL。 5. **Servlet配置**:在...

Global site tag (gtag.js) - Google Analytics