servlet的生命周期
所谓生命周期,指的是servlet容器如何创建servlet实例,分配其资源,调用其方法,并销毁其实例的整个过程。
阶段一:实例化(创建servlet对象,调用构造器)。在如下两种情况下会进行对象实例化:
第一种情况:当请求到达容器时,容器查找该servlet对象是否存在。如果不存在才会创建实例。
第二种情况:容器在启动时,或者新部署了某个应用时,会检查web.xml当中,servlet是否有load-on-starup配置,如果有,则会创建servlet实例。load-on-starup参数值越小,优先级越高(最小值为0,优先级最高)
阶段二:初始化。
为servlet分配资源,调用init(ServletConfig config)方法,config对象可以用来访问servlet的初始化参数,初始化参数是使用init-param配置的参数。init()方法可以被重写。
阶段三:就绪/调用。
有请求到达容器,容器调用servlet对象的service()方法。HttpServlet的service()方法会依据请求方式来调用doGet()或者doPost()方法。但是这两个do方法默认情况下会抛出异常,需要子类去重写。
阶段四:销毁。
容器依据自身的算法,将不再需要的servlet对象删除。在删除之前,会调用servlet对象的destory()方法。destory()方法用于释放资源。
在servlet的整个生命周期中,init(),destory()方法只会执行一次,而service()方法可以被执行多次。