Servlet的生命周期与详解

前言

周期  

说明 

init 

getServletConfig

service

destory

init方法的执行时期 

周期总结 

init 

 service

destory


 

前言

Servlet例子与注解配置

周期  

创建web项目,写一个测试ServletDemo1类

Servlet的生命周期与详解_第1张图片

package com.lingaolu.servlet;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;

/**
 * @author 林高禄
 * @create 2020-07-06-10:46
 */
@WebServlet("/demo1")
public class ServletDemo1 implements Servlet {
    /**
     * 初始化方法,在Servlet被创建是执行,只会执行一次
     * @param servletConfig
     * @throws ServletException
     */
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init......");
    }

    @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......");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    /**
     * 摧毁方法,在服务器正常关闭是,执行,执行一次
     */
    @Override
    public void destroy() {
        System.out.println("destroy......");
    }
}

 

运行访

Servlet的生命周期与详解_第2张图片

一直刷新访问,控制台输出

Servlet的生命周期与详解_第3张图片

可见init方法只执行一次,而service方法每次访问都执行  

 

 我们关闭项目

Servlet的生命周期与详解_第4张图片

控制台输出

Servlet的生命周期与详解_第5张图片

 destory方法也执行了一次

说明 

init 

初始化方法,在Servlet被创建是执行,只会执行一次

getServletConfig

获取配置对象,不常用

service

提供服务方法,每一次Servlet被访问是执行,执行多次

destory

摧毁方法,在服务器正常关闭是,执行,执行一次

 

init方法的执行时期 

 我们运行项目,没有有init......输出,说明ServletDemo1还没有被创建,init方法还没有执行,直到我们第一次访问demo1,才执行init放发

Servlet的生命周期与详解_第6张图片

那么 ServletDemo1能不能在项目启动的时候被创建呢,加载一下资源,可以,需要配置loadOnStartup

Servlet的生命周期与详解_第7张图片

loadOnStartup为负数时,是访问才创建,loadOnStartup大于等于0时,是启动项目就创建

默认为-1,访问才创建

Servlet的生命周期与详解_第8张图片

我们启动下项目

Servlet的生命周期与详解_第9张图片

 ServletDeme1被创建了,也执行了init方法

周期总结 

init 

  • Servlet创建时执行,
  • 可配置loadOnStartup的值来设置执行时期,loadOnStartup为负数时,是访问才创建,loadOnStartup大于等于0时,是启动项目就创建
  • 只执行一次,可用于相关资源的初始化
  • 因为只执行一次,说明只有一个实例,是单例的,在多用户访问时会存在线程安全问题
  • 线程安全问题解决:不能加锁,会影响性能,所以尽量不要在servlet中定义成员变量,要定义局部变量,这样每个用户进来都是一个新的变量,如果要定义成员变量,也是不能修改这个成员变量。

 service

提供服务方法,每一次Servlet被访问是执行,执行多次

destory

摧毁方法,在服务器正常关闭是,执行,执行一次,用于释放资源 

你可能感兴趣的:(Web核心,Servlet,java,生命周期)