Servlet的生命周期就是从Servlet出现到销毁的全过程,主要分为如下阶段,下面一一详解@mikechen
1.创建servlet的实例
Web容器负责加载Servlet,当web容器启动时或者是在第一次使用这个Servlet时,容器会负责创建Servlet实例。
当启动Servlet容器时,容器首先查找一个配置文件web.xml,这个文件中记录了可以提供服务的Servlet。
如下Web.xml配置所示:
<!-- 配置一个servlet --> <!-- servlet的配置 --> <servlet> <!-- servlet的内部名称,自定义。尽量有意义 --> <servlet-name>ServletDemo</servlet-name> <!-- servlet的类全名: 包名+简单类名 --> <servlet-class>lm.practice.ServletDemo</servlet-class> </servlet> <!-- servlet的映射配置 --> <servlet-mapping> <!-- servlet的内部名称,一定要和上面的内部名称保持一致!! --> <servlet-name>ServletDemo</servlet-name> <!-- servlet的映射路径(访问servlet的名称) --> <url-pattern>/servlet</url-pattern> </servlet-mapping>
每个Servlet被指定一个Servlet名,也就是这个Servlet实际对应的Java的完整class文件名,Servlet容器会为每个自动装入选项的Servlet创建一个实例。
2.初始化init
void init(ServletConfig var1) throws ServletException;
在Servlet实例化之后,Servlet容器会调用init()方法,来初始化该对象,但是这个方法在后续的请求中不会再次被调用,仅仅只会调用一次。
初始化init:主要是为了让Servlet对象在处理客户请求前可以完成一些初始化的工作,比如:建立数据库的连接,获取配置信息等。
如果初始化失败后,执行init()方法抛出ServletException异常,Servlet对象将会被垃圾回收器回收。
3.服务Service
@Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { super.service(req, res); }
然后调用Servlet容器的Service方法,Service()是Servlet的核心,负责响应客户的请求。
比如:每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用,而且传递给这个方法一个请求(ServletRequest)对象和一个响应(ServletResponse)对象作为参数。
然后,Service() 方法检查 HTTP 请求类型(GET、POST等),根据请求方式调用doGet()或doPost()方法。
4.销毁destory
@Override public void destroy() { super.destroy(); }
当服务器不再需要Servlet实例或重新装入时,会调用destroy方法,销毁Servlet实例。
使用这个方法,Servlet可以释放掉所有在init方法申请的资源,比如:关闭数据库的连接等。
随后,在destroy()方法调用之后,容器会释放这个Servlet对象,在随后的时间内,该对象会被Java的垃圾收集器所回收。
以上就是Servlet的4个阶段的生命周期的详解,希望对你理解Servlet有所帮助!
mikechen睿哥
mikechen睿哥,十余年BAT架构经验,资深技术专家,就职于阿里、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》