Servlet 生命周期示意图:

    Servlet 生命周期 - 图1

    Servlet 的生命周期:
    1、加载和实例化:Servlet 容器负责加载和实例化 Servlet

    • 加载和实例化可以发生在容器启动时,或者延迟初始化直到容器决定有请求需要处理时
    • 当 Servlet 引擎启动后,servlet 容器必须定位所需要的 Servlet 类。Servlet 容器使用普通的 Java 类加载设施加载 Servlet 类。可以从本地文件系统远程文件系统或者其他网络服务加载。加载完 Servlet 类后,容器就可以实例化它并使用了。

    2、初始化:一旦一个 Servlet 对象实例化完毕,容器接下来必须在处理客户端请求之前初始化该 Servlet 实例

    • 容器调用 Servlet 的 init 方法完成初始化,init 方法只会调用一次
    • 初始化主要用于初始化一些代价高的资源(如数据库连接)和只执行一次的动作

    3、运行阶段:核心阶段

    • 在该阶段中,Servlet 容器会为当前的请求创建一个 ServletRequest 对象和一个 ServletResponse 对象(它们分别代表 HTTP 请求和 HTTP 响应),并将这两个对象作为参数传递给 Servlet 的 service() 方法
    • service() 方法从 ServletRequest 对象中获得用户的详细请求信息并处理该请求,通过 ServletResponse 对象生成响应结果

    注意:

    • 在 Servlet 整个生命周期中,用户每次请求访问 Servlet 时,Servlet 容器都会调用一次 Servlet 的 service() 方法,并且创建新的 ServletRequest 和 ServletResponse

    4、销毁阶段:

    • 当 tomcat 关闭或检测到 Servlet 要从 tomcat 删除时会自动调用 destroy() 方法,让实例释放掉所占的资源。一个 Servlet 长时间不使用的话,也会被 tomcat 回收
    • destroy() 方法在 Servlet 的生命周期中只会被调用一次

    注意:

    • Servlet 对象的创建、提供服务、销毁等操作均由 tomcat 管理,Java 程序员只是负责编写 Servlet 的处理逻辑