• 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 中开发)
     

     

       

     

  • 相关阅读:
    (已解决)执行bat脚本文件的@title 设置中文标题后执行,出现中文乱码
    TMGM外汇平台官网最全测评(2022年版)
    GBase 8c V3.0.0数据类型——网络地址函数和操作符(cidr和inet操作符)
    安卓文件资源中,一个字串包含引用其他字串的写法
    c++ SFML ftp切换工作目录并且删除目录
    67. SAP ABAP 监控用户事物码和程序执行的工具介绍
    编译原理实验三、 词法分析实验报告
    大语言模型在研究领域的应用——多模态大语言模型
    信创之国产浪潮电脑+统信UOS操作系统体验4:visual studio code中怎么显示中文
    oracle数据库赋权
  • 原文地址:https://blog.csdn.net/allway2/article/details/127748448