`
chenzan2010
  • 浏览: 18489 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

RequestDispatcher 使用

阅读更多

javax.servlet
Interface RequestDispatcher


public interface RequestDispatcher

Defines an object that receives requests from the client and sends them to any resource (such as a servlet, HTML file, or JSP file) on the server. The servlet container creates the RequestDispatcher object, which is used as a wrapper around a server resource located at a particular path or given by a particular name. 定义了一个对象用来接收客户端的请求,将它们发送给服务器上的任何资源(比如servlet,HTML文件,或者JSP文件)。 servlet容器创建了RequestDispatcher对象,用于包装以特定路径或特定名称定位的服务器资源。

This interface is intended to wrap servlets, but a servlet container can create RequestDispatcher objects to wrap any type of resource. 该接口目的是包装servlet,但是servlet容器创建的RequestDispatcher可以包装任何类型的资源。

 

 

Version:
$Version$
Author:
Various
See Also:
ServletContext.getRequestDispatcher(java.lang.String), ServletContext.getNamedDispatcher(java.lang.String), ServletRequest.getRequestDispatcher(java.lang.String)

<!-- ======== NESTED CLASS SUMMARY ======== --><!-- =========== FIELD SUMMARY =========== --><!-- ======== CONSTRUCTOR SUMMARY ======== --><!-- ========== METHOD SUMMARY =========== --><!-- -->

Method Summary
 void forward(ServletRequest request, ServletResponse response)
          Forwards a request from a servlet to another resource (servlet, JSP file, or HTML file) on the server. 从servlet向服务器上其他资源(servlet,JSP文件或者HTML文件)转发请求。
 void include(ServletRequest request, ServletResponse response)
          Includes the content of a resource (servlet, JSP page, HTML file) in the response. 包含响应中的资源(servlet,JSP文件,HTML文件)内容。
 

<!-- ============ FIELD DETAIL =========== --><!-- ========= CONSTRUCTOR DETAIL ======== --><!-- ============ METHOD DETAIL ========== --><!-- -->

Method Detail
<!-- -->

forward

public void forward(ServletRequest request,
                    ServletResponse response)
             throws ServletException,
                    IOException
Forwards a request from a servlet to another resource (servlet, JSP file, or HTML file) on the server. This method allows one servlet to do preliminary processing of a request and another resource to generate the response. 从servlet向服务器上其他资源(servlet,JSP文件或者HTML文件)转发请求。该方法允许请求和其他资源生成响应之前做一些预处理。

For a RequestDispatcher obtained via getRequestDispatcher(), the ServletRequest object has its path elements and parameters adjusted to match the path of the target resource. 对于通过getRequestDispatcher()获得的RequestDispatcher,ServletRequest对象可以调整路径组成和参数来匹配目标资源的路径。

forward should be called before the response has been committed to the client (before response body output has been flushed). If the response already has been committed, this method throws an IllegalStateException. Uncommitted output in the response buffer is automatically cleared before the forward. forward应当在响应提交给客户端之前调用(响应体输出被刷新前)。如果响应已经被提交,该方法抛出IllegalStateException。响应缓存中未提交的输出在转发之前自动清空。

The request and response parameters must be either the same objects as were passed to the calling servlet's service method or be subclasses of the ServletRequestWrapper or ServletResponseWrapper classes that wrap them. 传递给调用servlet的service方法的请求和响应参数可以是相同的对象,也可以是 对它们进行包装的ServletRequestWrapper或ServletResponseWrapper类的子类。

 

Parameters:
request - a ServletRequest object that represents the request the client makes of the servlet ServletRequest对象,表示客户端向servlet发出的请求
response - a ServletResponse object that represents the response the servlet returns to the client ServletResponse对象,表示servlet返回给客户端的响应
Throws:
ServletException - if the target resource throws this exception 如果目标资源抛出该异常时抛出
IOException - if the target resource throws this exception 如果目标资源抛出该异常时抛出
IllegalStateException - if the response was already committed 如果响应已经提交则抛出

<!-- -->

include

public void include(ServletRequest request,
                    ServletResponse response)
             throws ServletException,
                    IOException
Includes the content of a resource (servlet, JSP page, HTML file) in the response. In essence, this method enables programmatic server-side includes. 包含响应中的资源(servlet,JSP文件,HTML文件)内容。本质上,该方法使服务器端包含成为可能。

The ServletResponse object has its path elements and parameters remain unchanged from the caller's. The included servlet cannot change the response status code or set headers; any attempt to make a change is ignored. 来自调用者的ServletResponse对象的路径组成和参数保持不变。包含的servlet 不能改变响应状态代码或设置头;任何变更的企图都会被忽略。

The request and response parameters must be either the same objects as were passed to the calling servlet's service method or be subclasses of the ServletRequestWrapper or ServletResponseWrapper classes that wrap them. 传递给调用servlet的service方法的请求和响应参数可以是相同的对象,也可以是 对它们进行包装的ServletRequestWrapper或ServletResponseWrapper类的子类。

 

Parameters:
request - a ServletRequest object that contains the client's request ServletRequest对象,表示客户端请求
response - a ServletResponse object that contains the servlet's response ServletResponse对象,表示servlet响应
Throws:
ServletException - if the included resource throws this exception 如果包含的资源抛出该异常时抛出
IOException - if the included resource throws this exception 如果包含的资源抛出该异常时抛出

<!-- ========= END OF CLASS DATA ========= -->=========================================

RequestDispatcher

forward

1. 如果 Forward URL 中有参数, 并且与 request 对象中现有的参数同名, 则 getParameter 方法返回 Forward URL中的参数
2. 在 Forward 之前, 容器应读取 POST Form Data 中的参数
3. 如果 Forward URL 中带有 jsessionid 参数, 则容器将其当做 URL 的一部分, 而不做 SessionId
4. 在 forward 方法调用之前, 容器先清除输出缓存, 如果数据已发送到浏览器, 则抛出 IllegalStateException
5. 在 forward 方法返回之前, 容器应将所有数据发送到浏览器, 并关闭输出流, 这就意味着 forward 方法调用后, 所有使用输出流输出的数据都将忽略
6. 在 forward 之前, 容器应根据 Forward URL 重设 request 以下属性: ServletPath, RequestURI, QueryString, PathInfo. RequestURL 不变, 如果是用 getNameDispatcher 得到的, 就不需要重设
7. Forward 请求时, 应当处理 welcome files
8. Forward 时, 不做 Filting
9. request 和 response 参数可以是容器的实现类, 也可以 ServletRequestWrapper 和 ServletResponseWrapper 或其子类

include

1. 如果 Include URL 中有参数, 并且与 request 对象中现有的参数同名, 则 getParameter 方法返回 Include URL中的参数
2. 在 Include 之前, 容器应读取 POST Form Data 中的参数
3. 如果 Include URL 中带有 jsessionid 参数, 则容器将其当做 URL 的一部分, 而不做 SessionId
4. 在被包含的 Servlet 中, 只通过输出流输出内容, 不能设响应头, 所有的设置都被忽略, 但不抛异常
5. 在 include 之前, 容器不重设 request 各种属性, 但将被包含 ContextPath, ServletPath, PathInfo, QueryString, RequestURI 放到 request 的 attribute 中 (如果是使用 getNameDispather 则不设)

 javax.servlet.include.context_path = ContextPath
 javax.servlet.include.servlet_path = ServletPath
 javax.servlet.include.path_info = PathInfo
 javax.servlet.include.query_string = QueryString
 javax.servlet.include.request_uri = RequestURI

6. Include 时, 不做 Filting
7. Include 请求时, 应当不处理 welcome files
8. request 和 response 参数可以是容器的实现类, 也可以 ServletRequestWrapper 和 ServletResponseWrapper 或其子类

通过 ServletContext 得到的 RequestDispatcher, 其 URL 是相对于 ContextPath 的
通过 ServletRequest 得到的 RequestDispatcher, 其 URL 是相对于最初请求的 ServletPath (如果是一串的 forward , 最好处理请求的 Servlet 的 Path)

调用 getNameDispatcher 如果 Servlet 不存在, 则返回 null

==========================
1.首先建立一个html页收集输入,傻子都会,传递参数为color
2.然后Servlet 收集参数,并以参数通过JavaBean建立一个实例
Bean object =new Bean(color);
3.接着通过JavaBean的get方法返回color, Servlet 进行判断.//equals() method.
object.getColor();
4.servlet 判断后转到相应的jsp页面
String addr=...
核心方法:
reqest.setAttribute("Instance", object);
RequestDispatcher dispatcher=request.getRequestDispatcher(addr);
dispatcher .forward(request, response);
5.jsp 页面根据前面建立的实例读取相应的String.
<jsp:useBean  id="Instance"  type="where is bean and name" scope="request"/>
<jsp:getProperty name="Instance" property="String of getXXX() ‘s XXX ,here is String"/>
这个程序开始是按书上抄的,后来完全是自己写的
这下面的代码还不是很理解,到底建立了几个对象?那个是实例?特别是setAttribute("Red", color);
里是用前面的替换后边的吗?
String tempColor=request.getParameter("color");
 ColorBean color=new ColorBean(tempColor);
request.setAttribute("Red", color);
 RequestDispatcher dispatcher=request.getRequestDispatcher(addr);
 dispatcher.forward(request, response);
现在可以实现mvc架构了,但是,其中对象的产生过程还是不理解,对象啊,对象......
下边是源代码:
其中
Input.jsp 为收集颜色(string)页面
WantColor.java 为servlet
ColorBean.java 为JavaBean
其它的是三个jsp 页面用来连接javaBean 显示颜色
***********
//input.jsp
<%@ page contentType="text/html;charset=GB2312"%>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=GB2312">
    <title>请输入你想要的颜色</title>
  </head>
  <body>
  <form action="./servlet/WantColors" type=post>
  <input type=text name=color>
  <input type=submit value=submit>
  </form>
  </body>
</html>
**************
//wantColors.java
package moonsoft.test.j2ee.wantColors;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.PrintWriter;
import java.io.IOException;
public class WantColors extends HttpServlet
{
  private static final String CONTENT_TYPE = "text/html; charset=Big5";
  public void init(ServletConfig config) throws ServletException
  {
    super.init(config);
  }
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
  {
    String tempColor=request.getParameter("color");
   ColorBean color=new ColorBean(tempColor);
    if((color.getColor()==null)&&(color.getColor()).equals(""))
    {
      addr="../input.jsp";
      response.sendRedirect("");
    }
    else if(color.getColor().equals("red"))
    {
      request.setAttribute("Red", color);
      addr="../red.jsp";
    }
    else if(color.getColor().equals("green"))
    {
      request.setAttribute("Green",color );
      addr="../green.jsp";
    }
    else
    {
      request.setAttribute("Blue",color );
      addr="../blue.jsp";
    }
    RequestDispatcher dispatcher=request.getRequestDispatcher(addr);
    dispatcher.forward(request, response);
 
    /*response.setContentType(CONTENT_TYPE);
    PrintWriter out = response.getWriter();
    out.println("<html>");
    out.println("<head><title>WantColors</title></head>");
    out.println("<body>");
    out.println("<p>The servlet has received a GET. This is the reply.</p>");
    out.println("</body></html>");
    out.close();*/
  }
  public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
  {
    doGet(request, response);
    /*response.setContentType(CONTENT_TYPE);
    PrintWriter out = response.getWriter();
    out.println("<html>");
    out.println("<head><title>WantColors</title></head>");
    out.println("<body>");
    out.println("<p>The servlet has received a POST. This is the reply.</p>");
    out.println("</body></html>");
    out.close();*/
  }
  private String addr;
}
***********************
//ColorBean.java
package moonsoft.test.j2ee.wantColors;
public class ColorBean
{
  public ColorBean(String color)
  {
  this.color=color;
  }
  public String getString()
  {
    String s="The color is  :\t";
    return s+color;  
  }
  public String  getColor()
  {
    return color;
  }
  public void setColor(String color)
  {
    this.color=color;
  }
  private String color;
}
**************
red.jsp
<%@ page contentType="text/html;charset=Big5"%>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=Big5">
    <title>red</title>
  </head>
  <body bgcolor="#FF0000">
  <font color="#ffffff" size=6>
  <jsp:useBean id="Red" type="moonsoft.test.j2ee.wantColors.ColorBean" scope="request"/>
  <jsp:getProperty name="Red" property="String"/> 
  </font>
  </body>
</html>
那两个绿色和蓝色的copy 一下,然后改一下值就好了

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    JavaWeb开发技术-RequestDispatcher对象.pptx

    3. 分布式系统:使用 RequestDispatcher 对象可以实现分布式系统中的请求处理,提高系统的可扩展性和灵活性。 五、结论 RequestDispatcher 对象是 JavaWeb 开发中的一种重要对象,它提供了一种机制,允许开发者将...

    Servlet关于RequestDispatcher的原理详解

    RequestDispatcher的主要特点是浏览器上显示的URL是最先请求的目标资源的URL,不会因为使用了forward或include方法而改变。因此forward和include的调用对于用户来说是透明的。 在使用RequestDispatcher时,需要注意...

    RequestDispatcher

    理解并熟练使用`RequestDispatcher`对于构建灵活、高效的Web应用程序至关重要。 `RequestDispatcher`接口位于`javax.servlet`包下,它是Servlet API的一部分。这个接口提供了两个主要方法:`forward()`和`include()...

    jsp下载RequestDispatcher方式和文件输出的方式

    上传比较简单,共享下下载的程序。这里有RequestDispatcher方式和文件输出的方式,分别可以是相对路径和绝对路径,RequestDispatcher方式对应相对路径没有研究,希望有高手能补全。

    Java中Request请求转发详解

    Java中Request请求转发是指在Servlet中使用RequestDispatcher将请求转发到另一个Servlet或JSP页面,以实现请求的重定向或包含。在本文中,我们将通过示例代码详细介绍Java中Request请求转发的实现过程。 ...

    krislinzhao#StudyNotes#06RequestDispatcher请求转发1

    它们分别是编号|方法|描述1|public void forward(ServletRequest request,ServletResponse respon

    Servlet转发与重定向

    * 对于同一个 WEB 应用程序的内部资源之间的跳转,特别是跳转之前要对请求进行一些前期预处理,并要使用 HttpServletRequest.setAttribute 方法传递预处理结果,那就应该使用 RequestDispatcher.forward 方法。...

    request使用request使用

    本文通过详细介绍`HttpServletRequest`接口中的`setAttribute()`方法及其与`RequestDispatcher.forward()`方法的结合使用,帮助读者理解如何在Java Web应用中高效地传递数据并实现页面间的跳转。这种技术在实际开发...

    JSP中5种跳转foward,request等等的详细区别

    JSP 中有五种跳转方式,包括 RequestDispatcher.forward()、response.sendRedirect()、jsp:forward、RequestDispatcher.include() 和 HttpServletResponse.sendRedirect()。下面我们将详细介绍这五种跳转方式的区别...

    JSP与Servlet传值技术总结

    5. 使用RequestDispatcher对象和url参数:使用RequestDispatcher对象来forward请求,并在url中传递参数,例如:RequestDispatcher rd = application.getRequestDispatcher("/queryResult.jsp?a="+000); request....

    《JSP程序设计》复习题

    本资源摘要概括了 JSP程序设计的重要知识点,涵盖了 JSP 的基本概念、JSP 引擎、Tomcat 服务器、URL、Servlet 生命周期、JSP 指令、Java Web 中的 Tag 文件、JSP 中的用户Bean、RequestDispatcher、HTML 标记等方面...

    java中MVC设计模式

    使用 RequestDispatcher 可以轻松地实现 MVC 模式,在 Servlet 中使用 RequestDispatcher 将请求转发到 JSP 中,在 JSP 中使用 RequestDispatcher 将请求转发到 Servlet 中。 JSP:useBean 在 MVC 中的使用 JSP:...

    java web知识集锦.doc

    本文将深入探讨`RequestDispatcher`和`sendRedirect()`之间的主要区别,并通过实例帮助理解如何在实际项目中正确使用这两种技术。 #### RequestDispatcher详解 `RequestDispatcher`接口提供了在服务器端进行请求...

    MLDN魔乐JAVAWEB课堂26_MVC设计模式_代码

    例如,当控制器接收到用户请求后,可能会使用RequestDispatcher的`forward()`方法将请求转发到相应的模型方法处理,然后再将处理结果传递给视图。 以下是一个简单的例子,展示了如何使用RequestDispatcher: ```...

    Servlet中的相对路径和绝对路径归纳

    在使用 `RequestDispatcher` 时,可以使用相对路径或绝对路径。例如: `RequestDispatcher view = request.getRequestDispatcher("/abc.jsp");` `RequestDispatcher view = request.getRequestDispatcher("abc.jsp...

    java web知识集锦2.doc

    ### Java Web知识集锦:RequestDispatcher与sendRedirect的区别详解...通过以上的详细介绍,我们可以更好地理解`RequestDispatcher`与`sendRedirect`的区别以及各自的使用场景,有助于在实际开发中做出更加合理的选择。

    Servlet会话小例子

    在“HomeWork”文件中,可能包含了实现这些概念的示例代码,例如创建一个新的Servlet,处理用户请求,使用RequestDispatcher进行转发,通过ServletContext共享数据,以及利用HttpSession保存和读取会话信息。...

    Web_2_Servlet的基本使用和跳转1

    2. 使用 RequestDispatcher 的 forward 方法。 3. 使用 ServletContext 的 getRequestDispatcher 方法。 Servlet 获取请求参数 Servlet 可以获取请求参数,获取参数的方式有多种,例如: 1. 使用 ...

    jsp和servlet中实现页面跳转的方式实例总结.docx

    在 JSP 中,可以使用 RequestDispatcher.forward 方法将请求转发到另一个 JSP 页面。例如: ```jsp RequestDispatcher rd = getServletContext().getRequestDispatcher("/test/test2.jsp"); rd.forward(request, ...

    Servlet和JSP的集成-MVC.ppt

    在MVC模式下,当控制器(Servlet)处理完请求后,可以使用`RequestDispatcher`将请求转发到相应的JSP页面,这样JSP就可以作为视图来呈现结果。例如: ```java // Servlet代码 String forwardPage = "/jsp/result....

Global site tag (gtag.js) - Google Analytics