美文网首页
Servlet生命周期

Servlet生命周期

作者: itachi | 来源:发表于2016-12-21 16:00 被阅读43次

    局部变量放在栈中,实例变量放在堆中,静态变量放在方法区中

    所谓生命周期,指的是Servlet容器如何创建Servlet实例,分配其资源,调用其方法,并销毁其实例的整个过程

    阶段一:实例化

    创建Servlet对象,调用构造方法
    在如下 两种情况下会进行对象的实例化
    1、当请求到达容器时,容器查找该Servlet对象是否存在,
    若存在,则直接拿来使用,不存在则创建
    2、容器在启动时,或者新部署某个应用时,会检查web.xml当中Servlet是否有load-on-starup配置
    如果有,则会创建改Servlet实例,load-on-up参数值越小,优先级越高(最小值为0)
    Servlet 容器负责加载和实例化Servlet,当容器启动时,或者容器检测到需要这个Servlet来响应第一个请求时,web容器就加载并创建Servlet实例首先

    注意:Servlet是单例的,当容器启动或请求到达时,容器会先检测是否由此Servlet,无则创建,有则不创建,直接使用,但是对于请求Servlet引擎会为每一次请求都创建一个request和response对象

    阶段二:初始化

    为Servlet分配资源,调用init方法(ServletConfig config)方法
    config对象可以用来访问Servlet的初始化参数,初始化参数通过使用init-param配置
    Servlet容器会为每一个Servlet对象创建一个ServletConfig对象

    阶段三:就绪/调用

    当有请求到达容器时,容器会根据请求调用对应Servlet对象的service()方法

    阶段四:销毁

    当Servlet对象初始化后就常留在内存中,直到服务器停止才需要被销毁,Servlet引擎调用Servlet对象的destroy()方法,把Servlet对象销毁

    在Servlet的整个生命周期中,init,destroy只会执行一次,而service可以执行多次。
    

    ServletConfig接口
    创建Servlet对象时,同时会创建一个ServletConfig接口对象,ServletConfig可以为该Servlet读取预置参数,并且该对象是此Servlet对象独享,即每一个Servlet都有一个ServletConfig对象。

    ServletContext对象 接口 Servlet上下文
    ServletContext 是Servlet与Servlet容器之间的直接通信接口
    Servlet容器在启动一个web应用时,会为他创建一个ServletContext对象,每个web应用都有唯一的一个ServletContext对象

    同一个web应用所有Servlet对象共享一个Servletcontext
    Servlet对象可以通过他来访问容器中的各种资源
    Servletcontext对象在web应用被关闭时才会销毁
    不同的web应用,Servletcontext各自独立

    注:ServletConfig是在初始化Servlet前创建
    Servletcontext是在服务器启动前创建,这两个对象都不是必须的,我们可以自己写组件给Servlet予置数据

    图片1.png 图片2.png

    相关文章

      网友评论

          本文标题:Servlet生命周期

          本文链接:https://www.haomeiwen.com/subject/mwjqvttx.html