欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Servlet的生命周期

程序员文章站 2022-06-03 11:38:08
...

前言

周期  

说明 

init 

getServletConfig

service

destory

init方法的执行时期 

周期总结 

init 

 service

destory


 

前言

Servlet例子与注解配置

周期  

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

Servlet的生命周期

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的生命周期

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

Servlet的生命周期

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

 

 我们关闭项目

Servlet的生命周期

Servlet的生命周期

控制台输出

Servlet的生命周期

Servlet的生命周期

 destory方法也执行了一次

说明 

init 

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

getServletConfig

获取配置对象,不常用

service

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

destory

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

 

init方法的执行时期 

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

Servlet的生命周期

Servlet的生命周期

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

Servlet的生命周期

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

默认为-1,访问才创建

Servlet的生命周期

我们启动下项目

Servlet的生命周期

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

周期总结 

init 

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

 service

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

destory

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