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!

  • 相关阅读:
    C++11新特性
    Qt操作xml
    指针和引用的区别
    QT软件主题切换
    常见的临时变量的生成场景
    QQuickWidget+QML设置背景透明
    idea maven Could not transfer artifact
    Java项目启动时执行指定方法的几种方式
    解决bootstrap-table在切换分页后再次查询报错404问题
    bootstrap:表单必填项*标识,及提交前校验
  • 原文地址:https://www.cnblogs.com/xinfang520/p/7723329.html
Copyright © 2011-2022 走看看