• Servlet 中的 RequestDispatcher


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

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


    RequestDispatcher 接口的方法

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

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

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

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

    如何获取请求调度程序的对象

    ServletRequest 接口的 getRequestDispatcher() 方法返回 RequestDispatcher 的对象。语法:

    getRequestDispatcher 方法的语法

    1. public RequestDispatcher getRequestDispatcher(String resource);

    使用 getRequestDispatcher 方法的示例

    1. RequestDispatcher rd=request.getRequestDispatcher(“servlet2”);
    2. servlet2 是第二个 servlet 的 url-pattern  
    3.   
    4. rd.forward(request, response);方法可以是包含或转发

    请求调度程序接口示例

    在此示例中,我们将验证用户输入的密码。如果密码是 servlet,它会将请求转发到 WelcomeServlet,否则将显示一条错误消息:对不起,用户名或密码错误!在这个程序中,我们正在检查硬编码的信息。但是您也可以将其检查到我们将在开发章节中看到的数据库中。在此示例中,我们创建了以下文件:

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


    index.html

    1. <form action="servlet1" method="post">
    2. Name:<input type="text" name="userName"/><br/>
    3. Password:<input type="password" name="userPass"/><br/>
    4. <input type="submit" value="login"/>
    5. form>

    Login.java

    1. import java.io.*;
    2. import javax.servlet.*;
    3. import javax.servlet.http.*;
    4. public class Login extends HttpServlet {
    5. public void doPost(HttpServletRequest request, HttpServletResponse response)
    6. throws ServletException, IOException {
    7. response.setContentType("text/html");
    8. PrintWriter out = response.getWriter();
    9. String n=request.getParameter("userName");
    10. String p=request.getParameter("userPass");
    11. if(p.equals("servlet"){
    12. RequestDispatcher rd=request.getRequestDispatcher("servlet2");
    13. rd.forward(request, response);
    14. }
    15. else{
    16. out.print("Sorry UserName or Password Error!");
    17. RequestDispatcher rd=request.getRequestDispatcher("/index.html");
    18. rd.include(request, response);
    19. }
    20. }
    21. }

    WelcomeServlet.java

    1. import java.io.*;
    2. import javax.servlet.*;
    3. import javax.servlet.http.*;
    4. public class WelcomeServlet extends HttpServlet {
    5. public void doPost(HttpServletRequest request, HttpServletResponse response)
    6. throws ServletException, IOException {
    7. response.setContentType("text/html");
    8. PrintWriter out = response.getWriter();
    9. String n=request.getParameter("userName");
    10. out.print("Welcome "+n);
    11. }
    12. }

    web.xml

    1. <web-app>
    2. <servlet>
    3. <servlet-name>Loginservlet-name>
    4. <servlet-class>Loginservlet-class>
    5. servlet>
    6. <servlet>
    7. <servlet-name>WelcomeServletservlet-name>
    8. <servlet-class>WelcomeServletservlet-class>
    9. servlet>
    10. <servlet-mapping>
    11. <servlet-name>Loginservlet-name>
    12. <url-pattern>/servlet1url-pattern>
    13. servlet-mapping>
    14. <servlet-mapping>
    15. <servlet-name>WelcomeServletservlet-name>
    16. <url-pattern>/servlet2url-pattern>
    17. servlet-mapping>
    18. <welcome-file-list>
    19. <welcome-file>index.htmlwelcome-file>
    20. welcome-file-list>
    21. web-app>
    下载此示例

    下载此示例(在 Myeclipse
    IDE 中开发)下载此示例(在 Eclipse IDE 中开发)下载此示例(在 Netbeans IDE 中开发)
     

     

       

     

  • 相关阅读:
    MySQL数据库优化总结
    Spring 理解
    2023湖北民族大学计算机考研信息汇总
    【正点原子STM32连载】第二十二章 高级定时器实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
    Linux ubuntu 服务器部署详细教程
    C++ STL源码剖析之容器配接器stack与queue、priority_queue
    Docker从初学到进阶二(使用Docker命令,自定义镜像,部署微服务集群,配置自己的镜像仓库)
    国内多位架构大牛强烈推荐的大型分布式手册
    EntityManagerFactory和EntityManager的一个用法探究
    半导体制冷片-热电效应简介
  • 原文地址:https://blog.csdn.net/allway2/article/details/127748448