servlet运行在servlet容器中,它的生命周期由容器来管理。其生命周期分为四个阶段:
一:实例化
当servlet容器启动时或者是检测到有相应的servlet请求时,创建servlet实例。创建时需要知道servlet的位置信息。因为容器是通过java反射API来创建servlet实例,即调用的是servlet的默认构造函数,所以在编写servlet时,不应该提供带参数的构造函数。
二:初始化
在第一步实例化结束之后,容器将调用servlet的init()方法初始化该servlet对象,目的是让servlet在处理相应的请求之前做一些初始化工作,诸如建立数据库连接,获取配置信息(web.xml的内容)等。对于每个serlvet实例,init()方法只调用一次,在初始化期间,serlvet实例可以使用容器为其准备的servletConfig对象去获取web应用程序的配置信息,即在web.xml文件中设置的参数信息,这样就可以将相应的配置参数保存起来,以供后续方便的使用。
三:请求处理
servlet容器调用servlet的service()方法来对客户端的请求进行处理。在service()方法中,通过servletRequest对象得到客户端的相关信息和请求信息,对请求进行处理之后,通过servletResponse对象方法设置响应信息,对于httpServlet这个类来说,service()方法作为http请求的分发器,这个方法在任何时候都不能重载。当请求到来的时候,service()方法决定请求类型,并把请求分发给相应的处理方法。当你收到一个http请求而没用重载相应的方法时,就会返回一个说明此方法对本地资源不可以的标准http错误。
四:销毁
当容器检测到一个serlvet应该从服务中删除时,容器就会调用实例的destroy()方法,以便让该实例释放它所使用的资源,保存数据到持久存储设备。