先从一张图来看看servlet声明周期:
首先确保服务器开启的前提下,从浏览器上申请服务器的地址并根据请求路径定位到具体的servlet,向服务器发起请求,这时一个servlet的生命周期就开始了,servlet生命周期可分为以下四个阶段:实例化,初始化,服务,销毁
第一阶段:实例化
当发起请求后,会调用该Servlet类构造方法,进行实例化(创建该Servlet类的实例),如下图,就算不手动创建无参构造方法,也会自动调用默认的无参构造实例化servlet
第二阶段:初始化
实例被创建后,会执行 init()方法初始化该servlet实例,要注意的是,如果程序中没有自己重写 init()方法,会调用HttpServlet父类的init()方法执行相应逻辑,子类重写则会执行子类重写后的逻辑
第三阶段:服务
之所以称之为服务,是因为在这个阶段用到的方法 service(),在经历过前两个阶段后,会通过创建的servlet实例调用HttpServlet父类的 service()方法,在该方法中会根据请求方式的不同,来判断调用doGet()还是doPost()方法,这时同样的,如果子类重写了doGet()或doPost()方法,则根据子类的执行逻辑进行调用,如果没有重写,则还是会调用HttpServlet父类的响应方法执行(此时会响应405错误页面,即方法不被允许)
第四阶段:销毁
这个阶段即为servlet实例被销毁,调用destroy()方法(不重写会自动调用),服务器关闭或重启时,会销毁所有servlet实例