详解servlet的生命周期

生命周期


生命周期:
   是指从对象创建开始,直到对象最终被销毁所经历的过程:创建、提供服务、销毁
   1.创建
     默认情况下,Servlet的实例是在第一次被请求时创建的,紧接着调用init()方法,完成初始化,并且该init()方法在整个Servlet的生命周期中只会调用一次,由此可见servlet使用的是单例设计模式,所以会存在线程安全的问题,故而在servlet 中尽量少用成员变量
此外,我们可以通过配置文件web.xml控制servlet的创建时机,通过配置servlet的load-on-startup元素实现

2、提供服务:
   调用提供服务的方法service,每次请求都会调用(重复调用)
   
3.销毁:
   由容器在正常关闭是调用destory完成销毁
   
servlet生命周期的相关的方法:
   构造方法
   init()方法
   service()方法
   destory()方法
   
详解:
   初始化步骤:
      创建了servlet对象和servletConfig对象。并且相关联,而servletConfig对象又与当前对象的servletContext对象关联
      servlet对象只要通过getServletContext()方法就能得到web应用的servletContext 对象
      
      注意:
         servlet初始化的情况:
            1.当web应用处于运行阶段时,特定的servlet被客户端首次请求访问
            2.在web.xml文件中为servlet设置<load-on-startup>元素
            <servlet>
            <servlet-name>servlet1</servlet>
            <servlet-class>servlet.servlet1</servlet-class>
            <load-on-startup>0</load-on-startup>
            </servlet>
   说明:
      在servlet的配置中 <load-on-startup>5</load-on-startup>
     含义:
        标记容器是否在启动的时候就加载servlet
        当值为0或者大于0时,表示容器在启动时就加载servlet
        当值为负数或未定义,则表示容器在该servlet被选中时才加载
        
        正数的值越小,启动该servlet的优先级就越高


当web应用被重新启动时,wen应用中的所有servlet会在指定的时间被重新初始化,运行阶段在这个阶段servlet可以随时响应库护短的请求
当servlet容器接到访问特定的servlet请求时,servlet会创建一个针对于这个请求的servletRequest和servletResponse对象,然后调用service()方法,并将这两个对象作为参数传递给service()方法

service()方法通过servletRequest对象获取请求信息,并处理该请求,在通过servletResponse对象生成响应结果(不管是post还是GET方法提交,都会在service里处理,然后由service方法交由相对应的doGet()/doPost()方法处理,如果重写了service()方法就不会处理doget/dopost )

注意:
   当servlet容器把servlet生成的响应结果发送给客户后,servlet容器会销毁servletRequest对象和servletResponse对象。
   销毁阶段当web应用被终止时,servlet容器会先调用web应用中所有的servlet对象的destory()方法,然后销毁servlet对象
   
   此外容器还会在销毁与servlet对象关联的servletConfig对象。
   在destory()方法的实现中,可以释放servlet所占用的资源
如:关闭文件输入输出流,关闭与数据库的连接



注意:
   servlet的生命周期中,servlet的初始化和销毁只会发生一次,因此init()和destory()只会被servlet容器调用一次
   而service()方法取决于servlet被客户端访问的次数

import javax.servlet.*;
import java.io.IOException;

/**
 * Created by Administrator on 2017/7/12.
 */
public class LifeCycleServlet implements Servlet{

    //构造方法只会在创建servlet时执行一次
    public LifeCycleServlet(){
        System.out.println("--LifeCycleServlet--");
    }
//在servlet启动时执行,并在该生命周期内只执行一次
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
//每次处理请求都会被调用
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

    }

    @Override
    public String getServletInfo() {
        return null;
    }
//只会在关闭服务器时执行,只会执行一次
    @Override
    public void destroy() {

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值