zoukankan      html  css  js  c++  java
  • GenericServlet

    1. GenericServlet:

    1). 是一个 Serlvet. 是 Servlet 接口和 ServletConfig 接口的实现类. 但是一个抽象类. 其中的 service 方法为抽象方法

    2). 如果新建的 Servlet 程序直接继承 GenericSerlvet 会使开发更简洁.

    3). 具体实现:

              ①. 在 GenericServlet 中声明了一个 SerlvetConfig 类型的成员变量, 在 init(ServletConfig) 方法中对其进行了初始化
              ②. 利用 servletConfig 成员变量的方法实现了 ServletConfig 接口的方法
              ③. 还定义了一个 init() 方法, 在 init(SerlvetConfig) 方法中对其进行调用, 子类可以直接覆盖 init() 在其中实现对 Servlet 的初始化.
              ④. 不建议直接覆盖 init(ServletConfig), 因为如果忘记编写 super.init(config); 而还是用了 SerlvetConfig 接口的方法,
                    则会出现空指针异常.
              ⑤. 新建的 init(){} 并非 Serlvet 的生命周期方法. 而 init(ServletConfig) 是生命周期相关的方法.

    2.实验:

              在 web.xml 文件中设置两个 WEB 应用的初始化参数, user, password.
              定义一个 login.html, 里边定义两个请求字段: user, password. 发送请求到 loginServlet
              在创建一个 LoginServlet, 在其中获取请求的 user, password. 比对其和 web.xml 文件中定义的请求参数是否一致
              若一致, 响应 Hello:xxx, 若不一致, 响应 Sorry: xxx xxx 为 user.

    MyGenericServlet

    package com.aff.java;
    import java.io.IOException;
    import java.util.Enumeration;
    import javax.servlet.Servlet;
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    
    //自定义的一个Servlet接口的实现类,让开发任何Servlet都继承该类,以简化开发
    public abstract class MyGenericServlet implements Servlet, ServletConfig {
    
        /**
         * 下面的方法为Servlet接口的方法
         */
        @Override
        public void destroy() {
        }
    
        @Override
        public ServletConfig getServletConfig() {// 得到servletConfig传给调用他的子类
            return servletConfig;
        }
    
        @Override
        public String getServletInfo() {
            return null;
        }
    
        private ServletConfig servletConfig;
    
        @Override
        public void init(ServletConfig arg0) throws ServletException {
            this.servletConfig = arg0;
            init();
        }
        //自己定义的方法不是Servlet的生命周期方法
        public void init() throws ServletException {// 想初始化给他提供一个空的init方法
    
        }
    
        @Override
        public abstract void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException;
    
        /**
         * 以下方法为 ServletConfig 接口的方法
         */
        @Override
        public String getInitParameter(String arg0) {
            return servletConfig.getInitParameter(arg0);
        }
    
        @Override
        public Enumeration<String> getInitParameterNames() {
            return servletConfig.getInitParameterNames();
        }
    
        @Override
        public ServletContext getServletContext() {
            return servletConfig.getServletContext();
        }
    
        @Override
        public String getServletName() {
            return servletConfig.getServletName();
        }
    }

    LoginServlet

    package com.aff.java;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    
    public class LoginServlet extends MyGenericServlet {
        // 对当前Servlet进行初始化:覆盖init方法
        @Override
        public void init( ) throws ServletException {//在空的init方法中初始化
            System.out.println("初始化...");
        }
    
        @Override
        public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
            // 1. 获取请求参数
            String username = request.getParameter("username");
            String password = request.getParameter("password");
    
            // 2. 获取当前应用的初始化参数: user ,password
            // 需要使用servletContext对象
            String inituser = getServletContext().getInitParameter("user");
            String initpassword = getServletContext().getInitParameter("password");
    
            PrintWriter out = response.getWriter();
            // 3. 比对
            // 4. 打印响应字符串
            if (inituser.equals(username) && initpassword.equals(password)) {
                out.print("Hello" + username);
            } else {
                out.print("sorry" + username);
            }
        }
    }

    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"
        version="3.1">
        <!--配置当前web应用的初始化参数 全局的 -->
        <context-param>
            <param-name>user</param-name>
            <param-value>hmm</param-value>
        </context-param>
    
        <context-param>
            <param-name>password</param-name>
            <param-value>123456</param-value>
        </context-param>
    
        <servlet>
            <servlet-name>loginServlet</servlet-name>
            <servlet-class>com.aff.java.LoginServlet</servlet-class>
        </servlet>
    
        <servlet-mapping>
            <servlet-name>loginServlet</servlet-name>
            <url-pattern>/loginServlet</url-pattern>
        </servlet-mapping>
    
    </web-app>

    login.html

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    
    <form action="loginServlet" method="post">
    user:<input type="text"  name="username"/>
    password:<input type="password" name="password"/>
    <input type="submit" value="Submit"/>
    </form>
    
    </body>
    </html>

    目录

    All that work will definitely pay off
  • 相关阅读:
    086 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 03 面向对象基础总结 01 面向对象基础(类和对象)总结
    085 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 02 构造方法介绍 04 构造方法调用
    jQuery UI组件库Kendo UI使用技巧小分享
    Kendo UI ListView模板功能,让Web开发更轻松
    UI组件套包DevExpress ASP.NET Core v20.2新版亮点:全新的查询生成器
    Devexpress WinForms最新版开发.NET环境配置Visual Studo和SQL Server对应版本
    全新的桌面应用数据可视化呈现方式,Sankey Diagram控件你了解多少?
    java中的递归方法
    连接数据库查询 将查询结果写入exce文件中
    java连接mysql数据查询数据
  • 原文地址:https://www.cnblogs.com/afangfang/p/12716054.html
Copyright © 2011-2022 走看看