Notes

JSP | 02 Servlet 生命周期

🌸Author Echo Pan


生命周期

Servlet 生命周期:Servlet 加载—>实例化—>服务—>销毁

具体通过Servlet接口的init()service()destroy()方法来实现。

加载和实例化

启动Servlet容器时或者容器检测到需要某个Servlet来响应请求时,容器会先查找内存中是否存在该Servlet实例,不存在就创建一个。

初始化

Servlet容器调用init()方法初始化实例化后的Servlet对象,比如建立数据库连接、获取配置信息等。对于每一个Servlet实例,init()方法只被调用一次。初始化完成后,该实例将会被保存在内存中,直到实例被销毁或容器关闭。

发生错误时,一般会抛出ServletException异常或UnavailableException异常。其中,ServletException异常用于指明一般的初始化失败,如数据库服务未启动,无法建立数据库连接;ServletException异常表示该Servlet实例暂时或永久不可用。

服务

Servlet容器调用service()方法处理请求。在调用Service()方法之前,init()方法必须成功执行。在service()方法中,Servlet实例通过ServletRequest对象获取请求信息,通过ServletResponse对象设置响应信息。

发生错误时,一般会抛出ServletException异常或UnavailableException异常。

UnavailableException 异常

如果该指示了该实例永久不可用Servlet容器将调用destroy()方法释放该实例。此后对该实例的任何请求都将收到容器发送的HTTP 404(请求的资源暂时不可用)响应。

如果指示的是该实例暂时不可用,那么在不可用的时段内对该实例的请求都将收到容器发送的HTTP 503(服务器暂时忙,不能处理请求)响应。

销毁

检测到某个Servlet实例应该从服务中被移除的时候,容器会调用实例的destroy()方法,释放该实例所使用的资源。

当需要释放内存或关闭容器时,容器也会调用destroy()方法,释放Servlet实例,之后实例会被Java的垃圾收集器回收。


上一章:01.Servlet介绍、接口和类

下一章:03.创建Servlet、配置、常见问题

返回目录