📅  最后修改于: 2021-01-09 12:38:22             🧑  作者: Mango
RequestDispatcher接口提供了将请求分派到另一个资源的功能,该资源可能是html,servlet或jsp。此接口还可以用于包含其他资源的内容。它是servlet协作的一种方式。
RequestDispatcher接口中定义了两种方法。
RequestDispatcher接口提供两种方法。他们是:
如上图所示,第二个servlet的响应被发送到客户端。第一个servlet的响应不会显示给用户。
如上图所示,第二个servlet的响应包含在发送到客户端的第一个servlet的响应中。
ServletRequest接口的getRequestDispatcher()方法返回RequestDispatcher的对象。句法:
public RequestDispatcher getRequestDispatcher(String resource);
RequestDispatcher rd=request.getRequestDispatcher("servlet2");
//servlet2 is the url-pattern of the second servlet
rd.forward(request, response);//method may be include or forward
在此示例中,我们正在验证用户输入的密码。如果密码是servlet,它将转发请求到WelcomeServlet,否则将显示错误消息:抱歉,用户名或密码错误!。在此程序中,我们正在寻找硬编码信息。但是您也可以将其检查到数据库中,这将在开发章节中看到。在此示例中,我们创建了以下文件:
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