• servlet生命周期方法


    Servlet的生命周期:

    init:被创建

      只被执行一次,默认当该servlet被创建时,执行,一般用于加载资源(先创建servlet,才执行init)

        创建servlet:

          1.服务器一启动时就创建servlet

              <load-on-starup></load-on-starup>标签中值为0或者是正数

          2.第一次访问servlet时才创建servlet

            当<load-on-starup></load-on-starup>标签的值为复数或者是不配置该标签时

         web.xml配置:

        <!--    配置servlet路径-->
        <servlet>
            <servlet-name>demo2</servlet-name>
            <servlet-class>servlet.ServletDemo2</servlet-class>
    <!--        配置执行的servlet的创建时机-->
    <!--        当该标签的值为0或者是正数时,服务器一启动就会创建servlet-->
    <!--        当该标签的值为负数或者是不配置该标签时,第一次访问servlet时创建该servlet-->
            <load-on-startup>-1</load-on-startup>
        </servlet>

    线程安全问题:servlet的init方法,只执行一次,说明servlet在内存中只存在一个对象,是单例的

      问题:多个用户同时访问,可能存在线程安全问题

      解决:尽量不要在servlet中定义成员变量,即使定义了成员变量,也不要修改它的值,如果需要变量则尽量在servlet里的方法中定义局部变量

          

    service:提供服务

      可以执行多次,每当该servlet被访问时就会执行一次

    destroy:被销毁

      只被执行一次,当服务器关闭时执行,一般用于释放资源(先执行destroy方法,才销毁servlet)

      只有正常关闭servlet才会执行destroy方法,没有正常关闭则不能调用destroy方法

    getServletConfig:获取servlet的配置对象

      调用时执行

    getServletInfo:获取servlet的信息,比如版本号,作者等

      调用时执行

    servlet代码:

      ServletDemo2.class:

    package servlet;
    
    import javax.servlet.*;
    import java.io.IOException;
    
    
    public class ServletDemo2 implements Servlet {
    
        /**
         * 提供初始方法
         * 在servlet被创建时执行
         * @param servletConfig
         * @throws ServletException
         */
        @Override
        public void init(ServletConfig servletConfig) throws ServletException {
            System.out.println("创建方法 init");
        }
    
        /**
         * 获取servlet的配置对象
         * @return
         */
        @Override
        public ServletConfig getServletConfig() {
            return null;
        }
    
        /**
         * 提供服务方法
         * 每一次servlet被访问时执行,可以执行多次
         * @param servletRequest
         * @param servletResponse
         * @throws ServletException
         * @throws IOException
         */
        @Override
        public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
            System.out.println("服务方法 service");
        }
    
        /**
         * 获取servlet的一些信息,比如版本,作者等
         * @return
         */
        @Override
        public String getServletInfo() {
            return null;
        }
    
        /**
         * 销毁方法
         * 在服务器被正常关闭时执行,只会执行一次
         */
        @Override
        public void destroy() {
            System.out.println("销毁方法 destroy");
        }
    }

      web.xml:

     <!--    配置servlet路径-->
        <servlet>
            <servlet-name>demo2</servlet-name>
            <servlet-class>servlet.ServletDemo2</servlet-class>
    <!--        配置执行的servlet的创建时机-->
    <!--        当该标签的值为0或者是正数时,服务器一启动就会创建servlet-->
    <!--        当该标签的值为负数或者是不配置该标签时,第一次访问servlet时创建该servlet-->
            <load-on-startup>-1</load-on-startup>
        </servlet>
    
        <!--    配置servlet映射路径-->
        <servlet-mapping>
            <servlet-name>demo2</servlet-name>
            <url-pattern>/demo2</url-pattern>
        </servlet-mapping>
  • 相关阅读:
    scratch第四集——过河孙小弟
    scratch第二集——scratch中的知识帧动画怎么用?
    scratch第九集——雷霆打怪大作战
    scratch第三集——scratch列表方法
    scratch第一集——飞机大作战
    position
    BOM与DOM
    grid布局
    登录界面
    用js输出同样字符出现的次数
  • 原文地址:https://www.cnblogs.com/KeepCalmAndNeverSayNever/p/12810064.html
Copyright © 2020-2023  润新知