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

Servlet 中的 RequestDispatcher_第1张图片

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

Servlet 中的 RequestDispatcher_第2张图片

如上图所示,第二个 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 的信息的部署描述符文件。

Servlet 中的 RequestDispatcher_第3张图片


index.html

Name:
Password:

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

  
   
    Login  
    Login  
    
    
    WelcomeServlet  
    WelcomeServlet  
    
  
  
    
    Login  
    /servlet1  
    
    
    WelcomeServlet  
    /servlet2  
    
  
    
   index.html  
    
  
下载此示例

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

 

Servlet 中的 RequestDispatcher_第4张图片

   

Servlet 中的 RequestDispatcher_第5张图片

 

Servlet 中的 RequestDispatcher_第6张图片

Servlet 中的 RequestDispatcher_第7张图片

你可能感兴趣的:(servlet,java,前端)