Servlet RequestDispatcher请求分发

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

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

1. RequestDispatcher接口的方法

RequestDispatcher接口提供了两种方法,它们分别是:

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

RequestDispatcher接口的方法

如上图所示,servlet2的响应被发送到客户端。Servlet1的响应不会显示给用户。

include()方法

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

2. 如何获取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 

3. RequestDispatcher接口的示例

在这个示例中,我们将验证用户输入的密码。 如果密码是servlet,它将请求转发到WelcomeServlet,否则将显示错误消息:”抱歉,用户名或密码错误!”。 在此程序中使用硬编码指定密码。 但是也可以将密码与数据库中记录进行比较,这在后面的章节中会学习。 在此示例中创建了以下几个文件:

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

实现功能流程图:

实现功能流程图

启动Eclipse,创建一个动态web项目:RequestDispatcher,项目结构如下所示:

文件:index.html

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>ServletRequest示例</title> </head> <body>     <form action="servlet1" method="post">         用户名:<input type="text" name="username"><br>          密 码:<input type="password" name="password"><br>           <input             type="submit" value="登录">     </form> </body> </html> 

文件:LoginServlet.java

package com.xntutor.servlet;  import java.io.*; import javax.servlet.*; import javax.servlet.http.*;  public class LoginServlet extends HttpServlet {      public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {          // response.setContentType("text/html");         response.setContentType("text/html;charset=utf-8");         response.setCharacterEncoding("utf-8");         PrintWriter out = response.getWriter();          String username = request.getParameter("username");         String passwd = request.getParameter("password");          if (username.equals("xntutor") && passwd.equals("paswd123")) {             RequestDispatcher rd = request.getRequestDispatcher("servlet2");             rd.forward(request, response);         } else {             out.print("用户名或密码错误!");             RequestDispatcher rd = request.getRequestDispatcher("/index.html");             rd.include(request, response);         }     } } 

文件:WelcomeServlet.java

package com.xntutor.servlet;  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;charset=utf-8");          response.setCharacterEncoding("utf-8");         PrintWriter out = response.getWriter();          String username = request.getParameter("username");         out.print("你好, " + username);     } } 

文件:web.xml

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xmlns="http://java.sun.com/xml/ns/javaee"     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"     id="WebApp_ID" version="3.0">     <display-name>RequestDispatcher</display-name>     <servlet>         <servlet-name>LoginServlet</servlet-name>         <servlet-class>com.xntutor.servlet.LoginServlet</servlet-class>     </servlet>     <!-- Defines the path to access this Servlet -->     <servlet-mapping>         <servlet-name>LoginServlet</servlet-name>         <url-pattern>/servlet1</url-pattern>     </servlet-mapping>     <servlet>         <servlet-name>WelcomeServlet</servlet-name>         <servlet-class>com.xntutor.servlet.WelcomeServlet</servlet-class>     </servlet>     <!-- Defines the path to access this Servlet -->     <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>index.html</welcome-file>         <welcome-file>index.jsp</welcome-file>         <welcome-file>default.html</welcome-file>         <welcome-file>default.html</welcome-file>         <welcome-file>default.jsp</welcome-file>     </welcome-file-list> </web-app> 

启动Tomcat服务器,打开浏览器访问下面URL:

运行结果1

使用一个错误的密码登录,显示结果如下:

运行结果2

使用正确的用户名和密码(xntutor/paswd123)登录,显示结果如下:

运行结果3

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/264056.html

(0)
上一篇 2022年6月6日
下一篇 2022年6月6日

相关推荐

发表回复

登录后才能评论