浅谈servlet的生命周期

servlet的生命周期是servlet相关知识中很重要的一部分。web


servlet从被加载到销毁经历了多个阶段,其中须要咱们十分了解每一个阶段的意义做用,才能更好地编写相关的servlet程序。数据库

servlet的生命周期详解

下图很好的说明了servlet的各个阶段函数


Paste_Image.png


  • 首先,容器加载servlet类,从class字节码加载类
  • 随后初始化servlet,使之成为一个对象!servlet的无参构造函数运行,这里不须要咱们本身写构造函数,只须要使用编译器的提供的默认构造函数便可(** 至关于new操做 ,成为一个对象**),值得注意的是,此处的只是一个普通的对象,还不具有成为一个完整servlet的一些信息和功能,因此咱们要进行下一步,也就是init()方法。
  • 调用init()方法,此方法只在servlet的一辈子中调用一次,并且必须在容器调用service()以前完成。这一步主要是让上一步对象加上一些东西,使之再也不是一个普通的对象,而是一个特殊的servlet对象。
  • 调用service()方法,servlet的一辈子主要都在这里度过,处理用户请求,每一个请求在一个单独的线程里运行。
  • 调用destroy()方法,容器调用这个方法,从而在servlet被杀死以前有机会清理资源。与init同样,destroy也只能调用一次。

servlet生命周期中三大重要的时刻

  1. init() 什么时候调用:servlet实例建立后,并在servlet能为客户请求提供service服务前,容器要对servlet调用init。 做用: 使你在servlet处理客户请求以前有机会对其进行初始化 是否覆盖: 有可能。若是由初始化代码(如获得一个数据库链接),就要调用init()方法线程

  2. service() 什么时候调用: 第一个客户请求到来时,容器会开始一个新线程,或者从线程池分配一个线程,并调用servlet的service()方法。 做用: 这个方法会查看请求,肯定http方法 是否覆盖: 不太可能对象

  3. doGet或者doPost 什么时候调用: service方法根据请求的http方法调用doGet或者doPost。 做用: 要在这里写代码,你的web须要实现的业务逻辑等 是否覆盖: 必定要覆盖其中之一。生命周期

** 每一个请求在一个单独的线程里运行。容器不关心是谁的请求,每一个到来的请求意味着一个新的线程。ip

相关文章
相关标签/搜索