zoukankan      html  css  js  c++  java
  • 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 生命周期、工作原理]
    Good Good Write Bug, Day Day Up
  • 相关阅读:
    作业
    bash陷阱
    Hive
    工作小结
    Python脚本没有实时print信息
    Ubuntu下apt-get遇到Hash Sum Mismatch
    微信小程序要2017-01-19号发布!
    flex布局学习(四)flex色子布局练习
    flex布局学习(三)
    flex布局学习(二)
  • 原文地址:https://www.cnblogs.com/liyihua/p/14477473.html
Copyright © 2011-2022 走看看