Java Servlet教程—Servlet中的RequestDispatcher
Servlet中的RequestDispatcher
RequestDispatcher接口提供了将请求转发到另一个资源(可能是HTML、Servlet或JSP)的功能。这个接口也可以用来包含另一个资源的内容。它是Servlet协作的一种方式。
RequestDispatcher接口中定义了两个方法。
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文件)的内容。
如上图所示,第二个servlet的响应被发送给客户端。第一个servlet的响应不会显示给用户。
如上图所示,第二个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,它将请求转发到欢迎servlet。
- WelcomeServlet.java文件: 一个servlet类,用于显示欢迎消息。
- web.xml文件: 包含关于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>