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>

 

posted @ 2020-04-30 17:25  T&K  阅读(287)  评论(0编辑  收藏  举报