Servlet的生命周期(4个阶段过程图解)

Servlet的生命周期(4个阶段过程图解)-mikechen

Servlet的生命周期就是从Servlet出现到销毁的全过程,主要分为如下阶段,下面一一详解@mikechen

Servlet的生命周期(4个阶段过程图解)-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,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

👇阅读更多mikechen架构文章👇

阿里架构 |双11秒杀 |分布式架构 |负载均衡 |单点登录 |微服务 |云原生 |高并发 |架构师

以上

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法