zoukankan      html  css  js  c++  java
  • JAVA记录-Servlet RequestDispatcher请求转发

    RequestDispatcher接口提供将请求转发送到另一个资源的功能,它可能是htmlservletjsp等。 此接口也可用于包括另一资源的内容。它是servlet协作的一种方式。

    RequestDispatcher接口中定义了两种方法。它们分别是 -

    编号方法描述
    1 public void forward(ServletRequest request,ServletResponse response)throws ServletException,java.io.IOException servlet的请求转发到服务器上的另一个资源(servletJSP文件或HTML文件)。
    2 public void include(ServletRequest request,ServletResponse response)throws ServletException,java.io.IOException 在响应中包含资源的内容(servletJSP页面或HTML文件)。

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

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

    如何获取RequestDispatcher的对象?

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

    getRequestDispatcher方法的语法如下 -

    public RequestDispatcher getRequestDispatcher(String resource);
    
    Java

    使用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
    
    Java

    RequestDispatcher接口示例

    在这个例子中,验证用户输入的密码。如果密码是:mypasswd,它会将请求转发到WelcomeServlet,否则会显示一条错误消息:sorry username or password error! 在这个程序中,使用的是硬编码(即:直接在代码中指定密码)。大部分应用中都是在数据库中存储用户信息和密码的,在接下来的教程文章我们也会介绍和学习。在这个例子中,创建了以下几个文件:

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

    工作流程,请参考下图 -

    打开Eclipse,创建一个名称为:ReqDispatcher 的动态Web项目,其完整的项目结构如下图所示 -

    下面是这个项目中相关文件的代码实现 -

    文件:index.html -

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>登录</title>
    </head>
    <body>
    <div style="text-align:center;">
        <form action="/ReqDispatcher/login" method="post">
            用户名:<input type="text" name="userName" /><br /> 
            密码:<input type="password" name="userPass" /><br /> 
            <input type="submit" value="登录" />
        </form>
    </div>
    </body>
    </html>
    
    HTML

    文件:Login.java -

    package com.yiibai;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.RequestDispatcher;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * Servlet implementation class Login
     */
    public class Login extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        /**
         * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
         *      response)
         */
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // TODO Auto-generated method stub
            response.setCharacterEncoding("utf-8");//设置服务器端编码
            response.setContentType("text/html;charset=utf-8");
            PrintWriter out = response.getWriter();
    
            String name = request.getParameter("userName");
            String passwd = request.getParameter("userPass");
    
            // 用户输入的密码是否为:mypasswd
            if (passwd.equals("mypasswd") && name.equals("admin")) {
                RequestDispatcher rd = request.getRequestDispatcher("welcome");
                System.out.println("Username is : "+name);
                rd.forward(request, response);
            } else {
                out.print("Sorry UserName or Password Error!");
                RequestDispatcher rd = request.getRequestDispatcher("/index.html");
                rd.include(request, response);
            }
        }
    
    }
    
    Java

    文件:WelcomeServlet.java -

    package com.yiibai;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * Servlet implementation class WelcomeServlet
     */
    public class WelcomeServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        /**
         * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
         *      response)
         */
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setCharacterEncoding("utf-8");//设置服务器端编码
            response.setContentType("text/html;charset=utf-8");
            String name = request.getParameter("userName");
            if(name==null || name=="") {
                name = "";
            }
            PrintWriter out = response.getWriter();
            //String chset = response.getCharacterEncoding(); 
            out.print("<!DOCTYPE html>
    " + 
                    "<html>
    " + 
                    "<head>
    " + 
                    "<meta charset="UTF-8">
    " + 
                    "<title>登录成功</title>
    " + 
                    "</head>
    " + 
                    "<body>");
            out.print("<b>登录成功啦lala  ~ </b><hr/>");
            out.print("Welcome, " + name);
            out.close();
        }
    }
    
    Java

    文件:web.xml -

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://xmlns.jcp.org/xml/ns/javaee"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
        id="WebApp_ID" version="3.1">
        <display-name>ReqDispatcher</display-name>
        <welcome-file-list>
            <welcome-file>index.html</welcome-file>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
        <servlet>
            <servlet-name>Login</servlet-name>
            <servlet-class>com.yiibai.Login</servlet-class>
        </servlet>
        <servlet>
            <servlet-name>WelcomeServlet</servlet-name>
            <servlet-class>com.yiibai.WelcomeServlet</servlet-class>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>Login</servlet-name>
            <url-pattern>/login</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>WelcomeServlet</servlet-name>
            <url-pattern>/welcome</url-pattern>
        </servlet-mapping>
    </web-app>
    
    XML

    访问项目的URL为: http://localhost:8080/ReqDispatcher/ ,如果代码没有错误,那么应该会看到类似如下的界面 -

    当输入用户名和密码分别为:admin 和 mypasswd,然后提交登陆,应该会看到类似如下的界面 -

    如果用户名或密码错误,应该会看到有一条错误提示信息: Sorry UserName or Password Error!

  • 相关阅读:
    天梯赛5-12 愿天下有情人都是失散多年的兄妹 【dfs】
    poj2718 Smallest Difference【贪心】
    HDU problem 5635 LCP Array【思维】
    codeforces 782C Andryusha and Colored Balloons【构造】
    HDU 4278 Faulty Odometer【进制转换】
    codeforces B. The Meeting Place Cannot Be Changed【二分】
    POJ 3264 Balanced Lineup 【线段树】
    HDU 1850
    CodeForces-714C
    HDU Problem 1247 Hat's Words 【字典树】
  • 原文地址:https://www.cnblogs.com/xinfang520/p/7723329.html
Copyright © 2011-2022 走看看