首页 > 编程学习 > Servlet 中的 RequestDispatcher

Servlet 中的 RequestDispatcher

发布时间:2022/11/8 13:41:27

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 文件)的内容。

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

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

如何获取请求调度程序的对象

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

getRequestDispatcher 方法的语法

  1. public RequestDispatcher getRequestDispatcher(String resource);

使用 getRequestDispatcher 方法的示例

  1. RequestDispatcher rd=request.getRequestDispatcher(“servlet2”);
  2. servlet2 是第二个 servlet 的 url-pattern  
  3.   
  4. rd.forward(request, response);方法可以是包含或转发

请求调度程序接口示例

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

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


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>  
下载此示例

下载此示例(在 Myeclipse
IDE 中开发)下载此示例(在 Eclipse IDE 中开发)下载此示例(在 Netbeans IDE 中开发)
 

 

   

 

Copyright © 2010-2022 dgrt.cn 版权所有 |关于我们| 联系方式