Servlet学习笔记2

简述Servlet接口中的抽象方法

  1. Servlet 接口中的抽象方法

    // 初始化方法
    void init(ServletConfig var1);
    
    // 获取Servlet配置对象
    ServletConfig getServletConfig();
    
    // 提供服务的方法
    void service(ServletRequest var1, ServletResponse var2);
    
    // 获取Servlet信息,如版本、作者...
    String getServletInfo();
    
    // 销毁方法
    void destroy();
    
  2. 初始化方法

    /**
     * 初始化方法(只执行一次)
     * @param servletConfig servlet 配置
     * @throws ServletException servlet 异常
     */
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("这是初始化方法!!!");
    }
    
  3. 提供服务的方法

    /**
     * 提供服务的方法
     * @param servletRequest servlet 请求
     * @param servletResponse servlet 响应
     * @throws ServletException servlet 异常
     * @throws IOException io 异常
     */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse)
            throws ServletException, IOException {
        System.out.println("这是一个提供服务的方法!!!");
    }
    
  4. 销毁方法

    /**
     * 这是一个销毁方法,在服务器正常关闭,就如tomcat执行了 `shutdown.sh` 。
     * 只执行一次。
     */
    @Override
    public void destroy() {
        System.out.println("这是一个销毁方法!!!");
    }
    
  5. 实现 Servlet 接口代码

    import javax.servlet.*;
    import java.io.IOException;
    
    public class ServletDemo02 implements Servlet {
    
        @Override
        public void init(ServletConfig servletConfig) throws ServletException {
            System.out.println("这是初始化方法!!!");
        }
    
        @Override
        public ServletConfig getServletConfig() {
            return null;
        }
    
        @Override
        public void service(ServletRequest servletRequest, ServletResponse servletResponse)
                throws ServletException, IOException {
            System.out.println("这是一个提供服务的方法!!!");
        }
    
        @Override
        public String getServletInfo() {
            return null;
        }
    
        @Override
        public void destroy() {
            System.out.println("这是一个销毁方法!!!");
        }
    }
    
    
  6. 配置文件 web.xml

    <servlet>
        <servlet-name>demo2</servlet-name>
        <servlet-class>my.servlet.study.ServletDemo02</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>demo2</servlet-name>
        <url-pattern>/my.servlet.study.ServletDemo02</url-pattern>
    </servlet-mapping>
    

Servlet 接口实现类的使用

  1. 启动服务器,控制台输出:

    这是初始化方法!!!
    
  2. 启动服务器后,访问:http://localhost:8080/TomcatServletStudy_war_exploded/my.servlet.study.ServletDemo02 ,控制台输出:

    这是一个提供服务的方法!!!
    

    每次访问该网址,都会执行一次 service 方法

  3. 关闭服务器,控制台输出:

    这是一个销毁方法!!!
    
  4. 利用 web.xml 配置文件,修改 init 方法的执行时机:

    <servlet>
        <servlet-name>demo2</servlet-name>
        <servlet-class>my.servlet.study.ServletDemo02</servlet-class>
    
        <!--
        指定Servlet的创建时机
            1. 第一次被访问是创建
                <load-on-startup> 的值为负数
            2. 服务器启动时被创建
                <load-on-startup> 的值为0或者正数
        -->
        <load-on-startup>-5</load-on-startup>
    </servlet>
    

备注:

  1. Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象, Servlet是单例的。
  2. 因此多个用户同时访问时,可能存在线程安全问题。
  3. 解决:尽不要在 Servlet中定义成员変。即使定义了成员变,也不要对修改值。

参考文献

  1. Servlet 生命周期
  2. [Servlet 生命周期、工作原理]
posted @ 2021-03-03 23:27  LeeHua  阅读(96)  评论(0编辑  收藏  举报