RequestDispatcher
接口提供了将请求分派到另一个资源的功能,资源可以是html
,servlet
或jsp
。接口还可以用于包含其他资源的内容。它是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文件)。
如上图所示,servlet2的响应被发送到客户端。Servlet1的响应不会显示给用户。
如上图所示,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:
使用一个错误的密码登录,显示结果如下:
使用正确的用户名和密码(xntutor
/paswd123
)登录,显示结果如下:
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/264056.html