Servlet 对象的生命周期

shuyepl 2022-06-03 14:15:00
Categories: Tags:

Servlet 对象的生命周期:Servlet 对象的创建到销毁的这段时间,它的生命周期是由 Tomcat 服务器维护的,默认情况下,在 Servlet 服务器启动的时候是不会实例化对象的,当用户访问到的时候再去创建,如果想要在服务器启动的时候就创建相应的对象,就需要进行一些设置:在 xml 文件的 Servlet 标签下添加一个子标签 load-on-startup ,表示在启动的时候加载对象,在标签的中间加上一个整数,可以随便写,这个数字用来设置优先级,数字越小的,在启动服务器的时候就会越先加载。

<load-on-startup>[这里随便写一个大于等于 0 的整数]</load-on-startup>

注意:在哪个类的 Servlet 标签中添加这个标签,启动服务器的时候就只有相应的类会加载,没有加上这个标签的类是不会在服务器启动的时候加载的。


Servlet 对象被加载时,内部方法的执行顺序:默认情况下,Servlet 对象不会在服务器启动的时候创建,只有在用户第一次访问服务时才会创建相应的对象,这个时候,对象内部的方法执行顺序为:无参构造方法 –> init 方法 –> service 方法。

其中 service 方法在每一次用户发送请求的时候都会被调用一次,而无参构造方法和 init 方法则是从头到尾只会调用一次,所以,Servlet 对象是单例的(Servlet 类不符合单例,是假单例)。

在服务器关闭的时候,Servlet 对象的 destroy 方法会先执行,然后销毁 Servlet 对象的内存,在destroy 方法调用的时候,Servlet 对象还没被销毁,一般在这个方法里面编写资源关闭相关或者保存资源的代码。

注意:Servlet 类中不能只写上有参构造方法,而不写上无参构造方法,因为 Servlet 对象在加载的时候是先调用无参构造方法的,如果强行启动服务器的话,浏览器会报 500 错误,所以在编写 Servlet 类的时候建议不要手动编写构造方法。


WEB 容器:就是服务器,在 Tomcat 里面就是 Tomcat 服务器,在其他服务器里面就是其他的服务器,一种比较官方的叫法,Servlet 对象就是在 WEB 容器里面的,它的生命周期由 WEB 容器负责,WEB 容器创建的 Servlet 对象会被放到一个 HashMap 中,只有在这个 HashMap 中的内容才会收到 WEB 容器的管理,而我们自己创建的对象不受 WEB 容器的管理。

服务器启动的时候会干啥:处理 xml 文件,将里面我们设置的路径和对应的类放到一个 HashMap 中,进行管理。


参考资料:https://www.bilibili.com/video/BV1Z3411C7NZ?p=12&share_source=copy_web