请求转发:request.getRequestDispatcher(URL地址).forward(request, response)
原理:
- 客户端发送请求,Servlet1做出处理。
- Servlet1调用sendReadirect()方法,将请求转发给Servlet2来处理请求,为客户端服务。
- Servlet2对客户端浏览器做出响应。
请求转发允许把请求转发给同一应用程序中的其他Web组件。这种技术通常用于Web应用控制层的Servlet流程控制器,它检查HTTP请求数据,并将请求转发到合适的目标组件,目标组件执行具体的请求处理具体的请求处理操作,并生成响应结果。
Servlet类使用javax.servlet.RequestDispatcher.forward()方法来转发它所收到的HTTP请求。转发目标组件将处理该请求并生成响应结果,或者将请求继续转发到另一个组件。最初请求的ServletRequest和ServletResponse对象被传递给转发目标组件,这使得目标组件可以访问整个请求上下文。值得注意的是,只能把请求转发给同一Web应用中的组件,而不能转发给其他Web应用的组件。
在JSP页面中,可以使用<jsp:forward>标签来转发请求。例如:<jsp:forward page="hello.jsp">
对于请求转发,转发的源组件和目标组件共享request范围内的共享数据。
重定向:response.sendRedirect(URL地址)
原理:
- 客户端发送请求,Servlet1做出处理。
- Servlet1调用sendReadirect()方法,将客户端的请求重新定位到Servlet2。
- 客户端浏览器访问Servlet2。
- Servlet2对客户端浏览器做出响应。
Web组件可以将请求重定向到任一URL,而不仅仅是同一应用中的URL。
重定向的源组件和目标组件之间不共用同一个HttpServletRequest对象,因此不能共享request范围内的共享数据。
HttpServletResponse的sendRedirect()方法向浏览器返回包含重定向的信息,浏览器根据这一信息迅速发出一个新HTTP请求,请求访问重定向目标组件。
包含
包含关系允许一个Web组件聚集来自同一个应用中其他Web组件的输出数据,并使用被聚集的数据来创建响应结果。这种技术通常用于模板处理器,它可以控制网页的布局。模板中每个页面区域的内容来自不同的URL,从而组成单个页面。这种技术能够为应用程序提供一致的外观和感觉。包含关系的源组件和目标组件共用同一个HttpServletRequest对象,因此它们共享request范围内的共享数据。
转发、重定向的区别:
- Request Dispatcher.forward()是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;服务器内部转发,请求转发,整个过程处于同一个请求当中。
- response.sendRedirect()则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。不在同一个请求。重定向,实际上客户端会向服务器端发送两个请求。
- forward()更加高效,在可以满足需要时,尽量使用RequestDispatcher.forward()方法。
- RequestDispatcher是通过调用HttpServletRequest对象的getRequestDispatcher()方法得到的,是属于请求对象的方法。
- sendRedirect()是HttpServletResponse对象的方法,即响应对象的方法,既然调用了响应对象的方法,那就表明整个请求过程已经结束了,服务器开始向客户端返回执行的结果。
(1)RequestDispatcher.forward方法只能将请求转发给同一个WEB应用中的组件;而HttpServletResponse.sendRedirect 方法不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。如果传递给HttpServletResponse.sendRedirect 方法的相对URL以“/”开头,它是相对于整个WEB站点的根目录;如果创建RequestDispatcher对象时指定的相对URL以“/”开头,它是相对于当前WEB应用程序的根目录。
(2)调用HttpServletResponse.sendRedirect方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;而调用RequestDispatcher.forward 方法的请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。
(3)HttpServletResponse.sendRedirect方法对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的 访问请求,这个过程好比有个绰号叫“浏览器”的人写信找张三借钱,张三回信说没有钱,让“浏览器”去找李四借,并将李四现在的通信地址告诉给了“浏览器”。于是,“浏览器”又按张三提供通信地址给李四写信借钱,李四收到信后就把钱汇给了“浏览器”。可见,“浏览器”一共发出了两封信和收到了两次回复, “浏览器”也知道他借到的钱出自李四之手。RequestDispatcher.forward方 法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。这个过程好比绰号叫“浏览器”的人写信找张三借钱,张三没有钱,于是张三找李四借了一些钱,甚至还可以加上自己的一些钱,然后再将这些钱汇给了“浏览器”。可见,“浏览器”只发 出了一封信和收到了一次回复,他只知道从张三那里借到了钱,并不知道有一部分钱出自李四之手。
(4)RequestDispatcher.forward方法的调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程;而HttpServletResponse.sendRedirect()方法调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。对于同一个WEB应用程序的内部资源之间的跳转,特别是跳转之前要对请求进行一些前期预处理,并要使用HttpServletRequest.setAttribute方法传递预处理结果,那就应该使用RequestDispatcher.forward方法。不同WEB应用程序之间的重定向,特别是要重定向到另外一个WEB站点上的资源的情况,都应该使用HttpServletResponse.sendRedirect方法。
(5)无论是RequestDispatcher.forward方法,还是HttpServletResponse.sendRedirect方法,在调用它们之前,都不能有内容已经被实际输出到了客户端。如果缓冲区中已经有了一些内容,这些内容将被从缓冲区中清除。
分享到:
相关推荐
当Servlet接收到请求后,可以通过`RequestDispatcher`对象的`forward()`方法将请求转发给其他资源,如另一个Servlet、JSP页面等。 - 请求转发共享相同的请求环境,也就是说,请求参数和对象在转发过程中保持不变,...
### 请求转发与重定向 #### 一、概念介绍 在Web开发中,**请求转发**与**重定向**是两种非常重要的控制流程技术,它们都用于实现页面跳转的功能,但其工作原理和应用场景有所不同。 #### 二、请求转发 ##### 1. ...
当客户端发送一个请求到服务器后,服务器通过Servlet或者Filter来处理这个请求,然后决定将请求转发到另一个资源,比如另一个Servlet或JSP页面。在这个过程中,客户端并不知道请求被转发了,因为它只与服务器进行了...
`jsp:forward`标签用于在服务器端将请求转发到指定的页面,而不是返回响应给客户端。这种方式下,浏览器的URL不会改变,用户感知不到页面跳转。 关于在JSP中实现页面停留若干秒后自动重定向,这通常通过HTML的`...
在JavaServer Pages (JSP) 技术中,标签、对象存储与提交、以及重定向和转发是核心概念,对于理解和开发动态Web应用程序至关重要。以下是对这些知识点的详细阐述: 1. JSP 标签: JSP标签是用于简化页面逻辑和提高...
Struts是一个著名的MVC(Model-View-Controller)框架,广泛应用于Java Web...在实际开发中,重定向常用于实现URL的隐藏,防止用户直接访问受保护的资源,而转发则在保持单一请求上下文的情况下连接不同的处理步骤。
如果验证成功,我们将请求转发到"success.jsp"页面,展示登录成功的消息;反之,如果验证失败,则转发到"error.jsp"页面,显示登录失败的信息。 用户登录验证通常涉及数据库操作。这里我们假设`UserDAO.checkLogin...
当服务器接收到一个请求后,它可以选择不直接处理这个请求,而是通过`RequestDispatcher`对象将请求转发到另一个资源,比如Servlet或JSP页面。在这个过程中,客户端浏览器并不知道这个变化,它仍然认为自己请求的是...
Java中Request请求转发是指在Servlet中使用RequestDispatcher将请求转发到另一个Servlet或JSP页面,以实现请求的重定向或包含。在本文中,我们将通过示例代码详细介绍Java中Request请求转发的实现过程。 ...
3. **效率较低**:相较于转发,重定向需要客户端重新发起请求,增加了网络开销。 4. **路径不受限**:重定向可以跳转到任何URL,包括不同的Web应用甚至是不同的域名。 **示例代码:** ```java response....
3. 请求转发与重定向的机制:RequestDispatcher.forward 方法在服务器端内部将请求转发给另外一个资源,而 HttpServletResponse.sendRedirect 方法对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出...
jsp 转发和重定向的区别 jsp 转发和重定向是两种常见的控制转移方式,它们都可以把控制从一个页面转到另一个页面,但是它们有很大的区别。 转发 jsp 转发是通过 `<jsp:forward>` 元素或 `request....
请求转发是指将请求再转发到另一资源(一般为 JSP 或 Servlet)。此过程依然在同一个请求范围内,转发后浏览器地址栏内容不变。请求转发使用 RequestDispatcher 接口中的 forward() 方法来实现,该方法可以把请求...
1.RequestDispatcher.forward()――转发 是在服务器端起作用,当使用forward()时, Servlet engine传递HTTP请求从当前的Servlet or JSP到另外一个Servlet,JSP 或普通HTML文件,也即你的 form提交至a.jsp,在a.jsp用到了...
标题提到的"jsp重定向地址栏不改变的实例"就是针对这种场景的一个解决方案。下面我们将详细探讨JSP中的重定向以及如何实现地址栏不改变的重定向。 首先,了解JSP中两种常见的请求转发方式:请求转发(Request ...
转发通常用于实现页面跳转和数据传递,例如,在用户调用ListServlet时,ListServlet将数据通过转发传递给list.jsp,以便显示数据给用户。 转发和重定向是两种不同的机制,用于实现页面跳转和数据传递。了解它们的...
下面我们将深入探讨这两个接口以及与它们相关的请求转发和重定向。 `HttpServletRequest`接口是Java Servlet API的一部分,主要用于处理客户端的HTTP请求。它提供了丰富的功能,例如获取请求参数、请求头信息、会话...
主要分为直接请求转发(Forward)和间接请求转发(Redirect)。这两种转发方式在处理请求时有着显著的区别。 直接请求转发(Forward): 直接请求转发是服务器内部的资源调度,用户在浏览器中只会看到最初的请求...