🌸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
异常。
如果该指示了该实例永久不可用,Servlet
容器将调用destroy()
方法释放该实例。此后对该实例的任何请求都将收到容器发送的HTTP 404(请求的资源暂时不可用)响应。
如果指示的是该实例暂时不可用,那么在不可用的时段内对该实例的请求都将收到容器发送的HTTP 503(服务器暂时忙,不能处理请求)响应。
检测到某个Servlet
实例应该从服务中被移除的时候,容器会调用实例的destroy()
方法,释放该实例所使用的资源。
当需要释放内存或关闭容器时,容器也会调用destroy()
方法,释放Servlet
实例,之后实例会被Java的垃圾收集器回收。