笔记3——servlet对象生命周期

张开发
2026/4/12 13:22:32 15 分钟阅读

分享文章

笔记3——servlet对象生命周期
Tomcat服务器(Web容器)负责管理servlet对象的生命周期。负责管理servlet对象的创建servlet对象上方法的调用servlet对象的销毁。程序员你只需要去写实现接口实现方法让tomcat去调其他你啥也干不了生命周期全是tomcat服务器管理的。要搞明白的是servlet对象什么时候出生的什么时候销毁的对象上方法什么时候调用的每个方法调用时候调几次。跟踪测试生命周期分别在启动项目浏览器回车发送请求多次请求关闭项目时候看控制台打印输出。关闭项目时打印的Servlet三个核心方法作用1init方法和destroy方法并不是static的所以能调用他的前提是得有对象所以执行init方法时对象已经创建了执行destroy方法时对象即将被销毁还没被销毁。2可以发现调用destroy方法次数最多那什么时候在init和destroy方法里写东西——那就看你需求了你如果需要在一个servlet对象创建的那个瞬间希望他去执行一段代码只执行这一次那就可以把这段代码放init里自然就会被调用如果你希望一段代码只在销毁前调用那就放destroy里放service里请求一次就调用一次只希望在销毁时候执行那一次那就把代码放销毁方法里。如果你每一次请求都需要去处理这个东西就给他放destroy方法里。所以就是给你留了这三个口。就具体看你需求有没有时刻要执行的代码有就放就行了。注意如果你希望在对象创建的那一刹那去执行这段代码最好不要把代码写在构造方法里要写到init方法当中因为你写构造方法里你就可能会写一个带参的构造方法有可能把无参构造方法干没了干没无参构造方法这个对象就造不了了就创建不出来了。当用户发送请求时底层服务器都做了什么所以没有无参数构造方法反射执行不了会报错所以保证要有无参构造。线程安全问题tomcat服务器底层就有线程池多个人不同的浏览器访问同一个网址底层tomcat会分配不同的线程我访问他会启动一个线程t1你再访问的时候会再给你分配一个t2线程就类比访问百度并不是得等你访问完我才能访问你访问的时候别人也能访问是多线程的。这个servlet是在多线程环境下运行的但是这个对象永远只有一个。所以如果在我们写的servlet类里面写了一个实例变量那这个实例变量就会危险线程不安全。——所以在servlet当中不建议写实例变量。比如上面又涉及修改操作又涉及多线程共享必然会有线程安全问题。所以一般是service方法里面写局部变量。服务器启动时创建servlet当有个需求我想在服务器启动的时候创建servlet对象在标签里加一个配置作用就是在指定服务器启动阶段实例化servlet对象这个地方需要写上一个数字数字越小优先级越高(从0开始)。就是如果下面还有别的servlet创建顺序是从小的先开始举例创建两个servlet:启动服务器就发现启动服务器就执行创建了不用请求才创建观察先后顺序

更多文章