【JavaWeb】Servlet生命周期

1.生命周期

从出生到死亡的过程就是生命周期。
对应Servlet中的三个方法:init(),service(),destroy()

2.实验

public class Demo02Servlet extends HttpServlet {
public Demo02Servlet(){
System.out.println("正在实例化>>>>>");
}
@Override
public void init() throws ServletException {
System.out.println("正在初始化>>>>");
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("正在服务>>>>");
}
@Override
public void destroy() {
System.out.println("正在销毁>>>>>");
}
}

启动项目,发送请求
image

3.结论

(1)第一次接收请求时,Servlet会进行实例化(调用构造方法)、初始化(init())、调用服务service()
(2)第二次请求后就都是调用service()
(3)当容器关闭时,所有的servlet实例都会被销毁,调用destroy()方法

4.发现

Tomcat只会创建一个Servlet实例,所有的请求都是这个实例去响应。
第一次请求时,Tomcat才会进行实例化、初始化,所以第一次请求时,耗时较长。

5.设置servlet初始化时机

在web.xml配置文件中设置<load-on-startup>,此时重新启动项目,发现servlet实例和初始化直接执行了,发送请求时直接调用服务,
而不是发送请求时才进行实例化和初始化
image

6.Servlet在容器中是:单例的、线程不安全的

- 单例:所有的请求都是同一个实例去响应
- 线程不安全:线程1执行到if语句时,线程2此时修改了num的值,导致线程1执行到了else。

因此:① 尽量不要在servlet中定义成员变量
不得不定义成员变量时
① 不要去修改成员变量的值
② 不要根据成员变量的值做逻辑判断
image

posted @   植树chen  阅读(96)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示