在Servlet程序中 有时需要调用另外一个资源来对浏览器的请求进行响应,则可以通过两种方式来实现:1.调用RequestDispatcher.forward方法来实现,2,调用HttpServletResponse.sendRedirect方法实现的请求重定向。
RequestDispatcher接口
Servlet API中定义了一个RequestDispatcher接口,它定义了RequestDispatcher实例对象的方法。RequestDispatcher实例对象是由Servlet引擎创建的,它用于包装一个要被其他资源(Servlet ,jsp),并可以通过其中的方法将客户端的请求转发给所包含的资源。
RequestDispatcher借口包含两个方法,forward方法和include方法,
forward将将请求转发到RequestDispatcher对象封装的资源,include方法将RequestDispatcher对象封装的资源作为当前响应内容的一部分包含进来。他们都有两个参数,即传递给当前Servlet的service方法的那两个ServletRequest和ServletResponse对象
include方法,要注意的是 被包含的Servlet程序不能改变响应消息的状态码和响应头,它里面设置状态码和响应头的语句将被忽略
在forward方法调用之前,如果Servlet程序中写入的部分内容已被传送到客户端,forward方法将抛出IllegalStateException. forward方法执行以后,写入到缓冲区的内容将被清空,后面的写入操作将被忽略。
forward方法的调用者和被调用者的状态码和响应头都不会被忽略。
forward() 与redirect()的区别
HttpServletResponse.sendRedirect方法实现请求重定向,RequestDispatcher.forward方法实现请求转发
forward()仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出重定向后的地址;redirect()则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。forward()更加高效,在其可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,需要跳转到一个其它服务器上的资源,则用sendRedirect()方法。
sendRedirect()方法可以重定向到:当前应用程序中的其他资源,同一站点的其他应用程序中的资源,甚至其他站点的资源。
他们都能使浏览器获得另一个URL所指向的资源。
1.如果传递给HttpServletResponse.sendRedirect方法的相对Url以"/"开头,它是相对于整个web站点的根目录;
如果创建RequestDispatcher对象是指定的Url以”/“开头,他是相对于当前web应用程序的根目
2.HttpServletResponse.sendRedirect方法对浏览器的请求做出响应,响应的结果是让浏览器去重新发出对另外一个URL的访问请求。
RequestDispatcher.forward方法在服务器端内部将请求转发给另外一个资源,浏览器只显示响应结果,并不知道在服务器内部发生了转发行为。
3,RequestDispatcher.forward方法的调用者和被调用者之间共享相同的request对象和response对象,他们属于同一个访问请求和响应过程;HttpServletResponse.sendRedirect方法调用者和被调用者使用各自不同的request对象和response对象,他们属于两个独立的访问请求和响应过程。
4,这两个方法调用之前都不能有内容已经被输出到客户端,如果缓冲区已有了一些内容,将被清除。
RequestDispatcher接口中的include()方法和forward()方法的区别
请求转发中 RequestDispatcher 接口中的 include ()方法和 forward ()方法的区别
//req 从客户浏览器获取信息
//resp 向客户浏览器发送信息
//forward ()方法的调用
ServletContext context=getServletContext();
RequestDispatcher rd=context.getRequestDispatcher(“/XXXX”);
rd.forward(req.resp);
//include ()方法的调用
RequestDispatcher rd=req.getRequestDispatcher(“XXXXX”);
Rd.include(req.resp);
// 传入的路径参数没有 ’/’ 的含义:没有斜杠表示是相对于当前 Servlet 的路径
区别:
forward ()方法执行完后,它下面的代码将不再执行。
include ()方法执行玩后,下面的代码继续执行。
注意:如果 include ()方法调用的那个 Servlet 中调用了 out.close() 关闭输出流对象;因为一旦关闭,响应将被提交,哪么 include() 方法下面的代码也将不再执行。
文章信息来源:
http://aguang520.iteye.com/blog/794640
分享到:
相关推荐
Servlet请求转发、重定向和包含是Servlet中处理客户端请求的重要技术,它们都涉及到如何有效地管理用户请求和页面跳转,但各自有不同的特性和应用场景。 1. **请求转发(Request Forward)** - 请求转发是在服务器...
* 请求分派只能将请求转发给同一个 Web 应用程序中的其他组件,而重定向不仅可以定向到当前应用程序中的其他资源,也可以重定向到其他站点的资源上。 * 重定向的访问过程结束后,浏览器地址栏中显示的 URL 会发生...
RequestDispatcher 对象提供了两个主要方法:forward() 和 include()。 1. forward() 方法 forward() 方法用于将请求从一个 Servlet 传递给另外的一个 Web 资源。在 Servlet 中,可以对请求做一个初步处理,然后...
`forward()`和`include()`方法分别用于在请求处理流程中进行内部转发和包含其他资源。 10. **HttpServletRequest和HttpServletResponse接口**:这两个接口扩展了ServletRequest和ServletResponse接口,为HTTP请求和...
- **javax.servlet.RequestDispatcher**:负责请求转发和重定向,常用的方法有forward()和include()。 - **javax.servlet.ServletConfig**:在Servlet初始化时,由容器传递给Servlet,包含了Servlet的配置信息。 - *...
5.转发与重定向:理解请求转发(jsp:include、RequestDispatcher的forward方法)和请求重定向(HttpServletResponse的sendRedirect方法)的区别。 6. MVC模式:理解MVC的基本概念,以及如何在JavaWeb中实现MVC架构...
`forward()`方法用于在服务器端内部将请求转发到其他资源,而`sendRedirect()`则是在客户端发起一个新的请求。 ### 7. Filter过滤器 Filter是Java EE中另一个重要组件,可以在请求到达Servlet之前或Servlet响应发送...
`RequestDispatcher`接口提供了`forward`和`include`方法,用于请求调度。 另外,Servlet还支持过滤器(Filter)机制,允许在请求到达目标Servlet之前进行预处理,或者在响应返回客户端之前进行后处理。`Filter`...
7. **RequestDispatcher**: 这个接口允许Servlet转发请求或重定向到其他资源。通过`getRequestDispatcher()`方法获取RequestDispatcher对象,然后调用`forward()`或`include()`方法。 8. **Session管理**: javax....
4. **转发与重定向**:掌握RequestDispatcher的forward()和sendRedirect()方法的区别和使用场景。 5. **会话管理**:了解HttpSession接口,如何创建、跟踪和销毁用户的会话。 6. **JSP语法**:学习JSP基本结构,...
4. **转发和重定向**:`RequestDispatcher`的`forward()`和`sendRedirect()`方法用于在Servlet和JSP之间传递控制。 5. **JSP内置对象**:学习如何使用request、response、session等对象,以及如何在JSP中嵌入Java...
RequestDispatcher.forward() 方法可以用于将请求从当前的 Servlet 或 JSP 转发到另一个 Servlet、JSP 或普通 HTML 文件,而 response.sendRedirect() 方法可以用于将用户重定向到另一个页面。jsp:forward 是一种...
JavaWeb开发中,请求转发(Request Forwarding)和请求包含(Request Including)是两种常见的页面间交互技术。它们都是在服务器端内部进行操作,而与客户端浏览器的交互方式有所不同,尤其是与URL重定向(Redirect...
5. **转发与重定向**:Servlet可以使用RequestDispatcher的forward()方法进行内部跳转,或者通过response.sendRedirect()方法实现客户端的重定向。 6. **多线程**:每个请求都会创建一个新的Servlet实例,因此...
RequestDispatcher 接口提供了两个方法:`void forward(ServletRequest request, ServletResponse response)` 和 `void include(ServletRequest request, ServletResponse response)`。这两个方法可以用来实现页面...
RequestDispatcher接口是servlet容器提供的一个用于请求转发和请求包含的接口。方法包括: 1. forward(ServletRequest request, ServletResponse response):用于将请求从一个Servlet或JSP页面转发到另一个资源。 2....
3. **转发与重定向**:`RequestDispatcher`的`forward()`方法在服务器内部转发请求,而`response.sendRedirect()`方法则向客户端发送新的HTTP请求。 **Model2架构**,也称为MVC(Model-View-Controller)架构,是一...
4. **转发与重定向**:Servlet可以使用`RequestDispatcher`的`forward()`方法进行请求转发,或者使用`sendRedirect()`方法进行重定向。两者区别在于转发发生在服务器端,而重定向会通知客户端发起新的请求。 5. **...
RequestDispatcher接口是用于调度请求的关键接口,它允许Servlet或JSP页面将请求转发给其他资源,如另一个Servlet、静态HTML文件或者JSP页面。主要方法有两个: 1. `forward(ServletRequest request, Servlet...
- `RequestDispatcher`的`forward()`和`sendRedirect()`方法的区别。 5. **会话管理**: - 使用`HttpSession`对象进行会话跟踪,添加和移除属性。 6. **Servlet配置**: - 在web.xml中配置Servlet,包括定义...