2021-04-21 08:31  阅读(133)
文章分类:Servlet 简单教程 文章标签:Servlet
©  原文作者:一点教程 原文地址:http://www.yiidian.com/servlet/

RequestDispatcher接口提供了将请求转发到另一个资源的功能,该资源可能是Html,Servlet或Jsp。该接口还可以用于包含其他资源的内容。

1 RequestDispatcher接口的方法

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

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

202104210836_1.png
如上图所示,第二个Servlet的响应被发送到客户端。第一个Servlet的响应不会显示给用户。


202104210834_2.png

如上图所示,第二个Servlet的响应包含在第一个Servlet的响应中,最终才发送回用户。

2 获取RequestDispatcher的对象

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

    
    public  RequestDispatcher getRequestDispatcher(String resource);  

getRequestDispatcher方法示例:

    
    RequestDispatcher rd=request.getRequestDispatcher("servlet2");  
    //servlet2是第二个Servlet的url-pattern
      
    rd.forward(request, response);//这里可以是forward或者include方法

3 RequestDispatcher的案例

3.1 案例涉及元素及流程说明

在本案例中,我们需要验证用户输入的密码。如果密码是yiidian,将转发请求到WelcomeServlet,否则将显示错误消息:“抱歉,用户名或密码错误!”本案例,我们的用户名和密码都是采用硬编码方式,当然您也可以将其改为从数据库中查询,可以参考后面的开发案例《使用Servlet完成用户登录》。以下文件是本案例需要的文件:

  • index.jsp文件:用于从用户获取输入。
  • LoginServlet.java文件:用于处理响应的Servlet类。如果用户输入了正确的密码,它将把请求转发到WelcomeServlet。
  • WelcomeServlet.java文件:用于显示欢迎消息的Servlet类。
  • web.xml文件:Web部署描述符文件,其中包含所有Servlet的配置信息。

202104210832_3.png

3.2 编写inde.jsp页面

    
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>一点教程网-请求转发与包含</title>
        <meta http-equiv="content-type" content="text/html" charset="UTF-8">
    </head>
    <body>
    <form action="servlet1" method="post">
        用户名:<input type="text" name="userName"/><br/>
        密码:<input type="password" name="userPass"/><br/>
        <input type="submit" value="登录"/>
    </form>
    </body>
    </html>
    

3.3 编写LoginServlet

    
    import javax.servlet.RequestDispatcher;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    /**
     * 一点教程网 - http://www.yiidian.com
     * 验证密码是否正确
     */
    public class LoginServlet extends HttpServlet{
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            response.setContentType("text/html;charset=utf-8");
            PrintWriter out = response.getWriter();
    
            String n=request.getParameter("userName");
            String p=request.getParameter("userPass");
    
            if(p.equals("yiidian")){
                RequestDispatcher rd=request.getRequestDispatcher("servlet2");
                rd.forward(request, response);
            }else{
                out.print("抱歉,用户名或密码错误!");
                RequestDispatcher rd=request.getRequestDispatcher("/index.jsp");
                rd.include(request, response);
            }
        }
    
    }
    

3.4 编写WelcomeServlet

    
    import javax.servlet.RequestDispatcher;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    /**
     * 一点教程网 - http://www.yiidian.com
     * 欢迎页面
     */
    public class WelcomeServlet extends HttpServlet{
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
    
            response.setContentType("text/html;charset=utf-8");
            PrintWriter out = response.getWriter();
    
            String n=request.getParameter("userName");
            out.print("欢迎你,"+n);
        }
    }
    

3.5 配置web.xml

    
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
             version="3.1">
    
        <servlet>
            <servlet-name>Login</servlet-name>
            <servlet-class>LoginServlet</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>
    
    </web-app>

3.6 运行测试

202104210832_4.png

输入yiidian密码,正确的情况

202104210832_5.png

输入错误密码的情况

202104210832_6.png

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> 使用Servlet请求转发与包含
上一篇
ServletRequest获取所有请求头
下一篇
使用Servlet请求重定向