zoukankan      html  css  js  c++  java
  • servlet生命周期

    生命周期是指容器如何创建servlet实例、分配资源、调用其方法,销毁实例的过程 
    阶段一: 实例化(就是创建 servlet 对象,调用构造器)
     在如下两种情况下会进行对象实例化。
     第一种情况:
      当请求到达容器时,容器查找该 servlet 对象是否存在,如果不存在,才会创建实例。
     第二种情况:
     容器在启动时,或者新部署了某个应用时,会检查 web.xml 当中,servlet 是否有load-on-starup 配置。如果有,则会创建该 servlet 实例。
     load-on-starup 参数值越小,优先级越高(最小值为 0,优先级最高)。
     
     实验1:设置构造器,观察多次访问的时候和service方法执行先后
     实验2:在配置文件中加入load-on-starup,观察实例化的时机

    阶段二: 初始化
     为 servlet 分配资源,调用 init(ServletConfig config);
     方法config 对象可以用来访问 servlet 的初始化参数。
     初始化参数是使用 init-param 配置的参数。
     init 可以 override。
     实验1:override init方法,观察执行实际(和上边的实验配合)
     实验2:加入<init-param>,并通过取值config
      <init-param>
        <param-name>name</param-name>
      <param-value>zhangsan</param-value>   
     </init-param>


      
      ServletConfig config=getServletConfig();
      String add=config.getInitParameter("address");
    、  ---------------------------------------------
      如果是有参的init那么不许要获取ServletConfig
      name=config.getInitParameter("name");

    阶段三: 就绪/调用
     有请求到达容器,容器调用 servlet 对象的 service()方法。
     HttpServlet 的 service()方法,会依据请求方式来调用 doGet()或者 doPost()方法。
     但是,这两个 do 方法默认情况下,会抛出异常,需要子类去 override。

     

    阶段四: 销毁
     容器依据自身的算法,将不再需要的 servlet 对象删除掉。
     在删除之前,会调用 servlet 对象的 destroy()方法。
     destroy()方法用于释放资源。
     在 servlet 的整个生命周期当中,init,destroy 只会执行一次,而 service 方法会执行多次。

  • 相关阅读:
    [luogu] P1440 求m区间内的最小值
    [NOI2014]起床困难综合症
    [SDOI2009]地图复原
    [USACO08JAN] Cow Contest
    【洛谷P5049】旅行(数据加强版)
    【NOIP2015】真题回顾
    【NOIP2014】真题回顾
    【UVA11987】Almost Union-Find
    【UVA11988】破损的键盘
    【UVA11134】传说中的车
  • 原文地址:https://www.cnblogs.com/xiyangyang2hao/p/5686737.html
Copyright © 2011-2022 走看看