📜  Servlet中的RequestDispatcher

📅  最后修改于: 2021-01-09 12:38:22             🧑  作者: Mango

Servlet中的RequestDispatcher

RequestDispatcher接口提供了将请求分派到另一个资源的功能,该资源可能是html,servlet或jsp。此接口还可以用于包含其他资源的内容。它是servlet协作的一种方式。

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

RequestDispatcher接口的方法

RequestDispatcher接口提供两种方法。他们是:

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

”RequestDispatcher接口的forward()方法”

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

”RequestDispatcher接口的include()方法”

如上图所示,第二个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。
  • WelcomeServlet.java文件:用于显示欢迎消息的servlet类。
  • web.xml文件:一个部署描述符文件,其中包含有关servlet的信息。

”RequestDispatcher接口”


Name:
Password:

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);
                    
        }
    }

}


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);
    }

}


 
    Login
    Login
  
  
    WelcomeServlet
    WelcomeServlet
  


  
    Login
    /servlet1
  
  
    WelcomeServlet
    /servlet2
  

  
   index.html