Servlet中的RequestDispatcher

RequestDispatcher接口提供了将请求转发到另一个资源(可能是HTML、Servlet或JSP)的功能。这个接口也可以用来包含另一个资源的内容。它是Servlet协作的一种方式。

RequestDispatcher接口中定义了两个方法。

RequestDispatcher接口的方法

RequestDispatcher接口提供了两个方法。它们是:

  1. public void forward(ServletRequest request, ServletResponse response)throws ServletException,java.io.IOException: 将请求从一个servlet转发到服务器上的另一个资源(Servlet、JSP文件或HTML文件)。
  2. public void include(ServletRequest request, ServletResponse response)throws ServletException,java.io.IOException: 在响应中包含一个资源(Servlet、JSP页面或HTML文件)的内容。

forward.jpg

如上图所示,第二个servlet的响应被发送给客户端。第一个servlet的响应不会显示给用户。

include.jpg

如上图所示,第二个servlet的响应被包含在发送给客户端的第一个servlet的响应中。

如何获取RequestDispatcher对象

ServletRequest接口的getRequestDispatcher()方法返回RequestDispatcher的对象。语法:

getRequestDispatcher方法的语法

**public** RequestDispatcher getRequestDispatcher(String resource);

使用getRequestDispatcher方法的示例

RequestDispatcher rd=request.getRequestDispatcher("servlet2");  
//servlet2 is the url-pattern of the second servlet  
  
rd.forward(request, response);//method may be include or forward  

RequestDispatcher接口的示例

在这个示例中,我们正在验证用户输入的密码。如果密码是servlet,它将请求转发到WelcomeServlet,否则将显示错误消息:抱歉,用户名或密码错误!在这个程序中,我们检查的是硬编码信息。但你也可以检查数据库,这我们将在开发章节中看到。在这个示例中,我们创建了以下文件:

  • index.html文件: 用于从用户获取输入。
  • Login.java文件: 一个servlet类,用于处理响应。如果密码是servlet,它将请求转发到欢迎servlet。
  • WelcomeServlet.java文件: 一个servlet类,用于显示欢迎消息。
  • web.xml文件: 包含关于servlet信息的部署描述符文件。

requestdispatcher.jpg

index.html

<form action="servlet1" method="post">  
Name:<input type="text" name="userName"/><br/>  
Password:<input type="password" name="userPass"/><br/>  
<input type="submit" value="login"/>  
</form>  

Login.java

import java.io.*;  
import javax.servlet.*;  
import javax.servlet.http.*;  
  
  
public class Login extends HttpServlet {  
  
public void doPost(HttpServletRequest request, HttpServletResponse response)  
        throws ServletException, IOException {  
  
    response.setContentType("text/html");  
    PrintWriter out = response.getWriter();  
          
    String n=request.getParameter("userName");  
    String p=request.getParameter("userPass");  
          
    if(p.equals("servlet"){  
        RequestDispatcher rd=request.getRequestDispatcher("servlet2");  
        rd.forward(request, response);  
    }  
    else{  
        out.print("Sorry UserName or Password Error!");  
        RequestDispatcher rd=request.getRequestDispatcher("/index.html");  
        rd.include(request, response);  
                      
        }  
    }  
  
}  

WelcomeServlet.java

import java.io.*;  
import javax.servlet.*;  
import javax.servlet.http.*;  
  
public class WelcomeServlet extends HttpServlet {  
  
    public void doPost(HttpServletRequest request, HttpServletResponse response)  
        throws ServletException, IOException {  
  
    response.setContentType("text/html");  
    PrintWriter out = response.getWriter();  
          
    String n=request.getParameter("userName");  
    out.print("Welcome "+n);  
    }  
  
}  

web.xml

<web-app>  
 <servlet>  
    <servlet-name>Login</servlet-name>  
    <servlet-class>Login</servlet-class>  
  </servlet>  
  <servlet>  
    <servlet-name>WelcomeServlet</servlet-name>  
    <servlet-class>WelcomeServlet</servlet-class>  
  </servlet>  
  
  
  <servlet-mapping>  
    <servlet-name>Login</servlet-name>  
    <url-pattern>/servlet1</url-pattern>  
  </servlet-mapping>  
  <servlet-mapping>  
    <servlet-name>WelcomeServlet</servlet-name>  
    <url-pattern>/servlet2</url-pattern>  
  </servlet-mapping>  
  
  <welcome-file-list>  
   <welcome-file>index.html</welcome-file>  
  </welcome-file-list>  
</web-app>  

dispatcher1.jpg

dispatcher2.jpg

dispatcher4.jpg

标签: java, Java Servlet, Java Servlet语言, Java Servlet开发, Java Servlet语法, Java Servlet脚本, Java Servlet教程, Java Servlet入门, Java Servlet入门教程, Java Servlet进阶, Java Servlet宝典, Java Servlet学习, Java Servlet指南, Java Servlet大全