Servlet 的生命周期 及 注意事项 总结
Servlet的生命周期
- 图解Servlet的生命周期
生命周期的各个阶段
- 实例化 :Servlet 容器创建 Servlet 的实例
- 初始化 :该容器调用init() 方法
- 请求处理 :如果请求Servlet,则容器调用 service()方法
- 服务终止 :销毁实例之前调用destroy() 方法
Servlet生命周期详解
Servlet是运行在Servlet容器(有时候也叫Servlet引擎,是web服务器和应用程序服务器的一部分,用于在发送的请求和响应之上提供网络服务,解码基于MIME的请求,格式化基于MIME的响应。常用的tomcat、jboss、weblogic都是Servlet容器)中的,其生命周期是由容器来管理。Servlet的生命周期通过java.servlet.Servlet接口中的init()、service()、和destroy()方法表示。Servlet的生命周期有四个阶段:加载并实例化、初始化、请求处理、销毁。
- 加载并实例化
Servlet容器负责加载和实例化Servelt。当Servlet容器启动时,或者在容器检测到需要这个Servlet来响应第一个请求时,创建Servlet实例。当Servlet容器启动后,Servlet通过类加载器来加载Servlet类,加载完成后再new一个Servlet对象来完成实例化。
- 初始化
在Servlet实例化之后,容器将调用init()方法,并传递实现ServletConfig接口的对象。在init()方法中,Servlet可以部署描述符中读取配置参数,或者执行任何其他一次性活动。在Servlet的整个生命周期类,init()方法只被调用一次。
- 请求处理
当Servlet初始化后,容器就可以准备处理客户机请求了。当容器收到对这一Servlet的请求,就调用Servlet的service()方法,并把请求和响应对象作为参数传递。当并行的请求到来时,多个service()方法能够同时运行在独立的线程中。通过分析ServletRequest或者HttpServletRequest对象,service()方法处理用户的请求,并调用ServletResponse或者HttpServletResponse对象来响应。
- 销毁
一旦Servlet容器检测到一个Servlet要被卸载,这可能是因为要回收资源或者因为它正在被关闭,容器会在所有Servlet的service()线程之后,调用Servlet的destroy()方法。然后,Servlet就可以进行无用存储单元收集清理。这样Servlet对象就被销毁了。这四个阶段共同决定了Servlet的生命周期。
Servlet生命周期,即阐述Servlet从产生到毁灭的整个过程。
在Servlet产生到消亡的过程中,有三个生命周期函数,初始化方法init(),处理客户请求的方法service(),终止方法destroy()。
init方法
在一个Servlet的生命周期中,init方法只会被执行一次,之后无论用户执行多少次请求,都不会在调用该方法。
关于init方法的执行时机,有两种方式可选,一般的是在服务器启动后第一个用户请求改Servlet是调用,你也可以设置该Servlet在服务器启动后自动执行。
init方法负责简单的创建或者加载一些数据,这些数据将用于该Servlet的整个生命周期中。
service方法
当一个客户请求改Servlet时,实际的处理工作全部有service方法来完成,service方法用来处理客户端的请求,并生成格式化数据返回给客户端。
每一次请求服务器都会开启一个新的线程并执行一次service方法,service根据客户端的请求类型,调用doGet、doPost等方法。
service是由web容器来调用的,我们无需对service具体内容做任何处理,service会自动的根据客户端的请求类型去调用doGet、doPost等方法,所以我们只需要做好doGet、doPost方法的实现就可以了。
destroy方法
该方法在整个生命周期中,也是只会被调用一次,在Servlet对象被销毁是调用,在servlet中,我们可以做一些资源的释放等操作,执行destory方法之后的servlet对象,会等待jvm虚拟机的垃圾回收机制择时回收。
doGet、doPost方法
实际的业务处理流程,service根据客户端的请求类型来自动匹配需要执行那个方法。
1、什么是生命周期?
生命周期表示一个java对象从最初被创建到最终被销毁,经历的所有过程。
2、Servlet对象的生命周期是谁来管理的?程序员可以干涉吗?
Servlet对象的生命周期,javaweb程序员是无权干涉的,包括该Servlet对象的相关方法的调用,javaweb程序员也是无权干涉的。
Servlet对象从最初的创建,方法的调用,以及最后对象的销毁,这个过程,是由Web容器来管理的。
Web Container管理Servlet对象的生命周期。
3、“默认情况下”,Servlet对象在WEB服务器启动阶段不会被实例化。【若希望在Web服务器启动阶段实例化Servlet对象,需要进行特殊的设置】
4、描述Servlet对象的生命周期
1)用户在浏览器中输入Serlvet的URL
2)web容器截取请求链接
3)web容器在容器上下文中找请求路径对应的Servlet对象
4)若没有找到对应的Servlet对象
4.1)通过web.xml文件中的相关配置信息,得到请求路径对应的Servlet对象
4.2)通过反射机制,调用Servlet类的无参构造方法完成Servlet对象的实例化
4.3)web容器调用Servlet对象的init方法完成实例化操作
4.4)web容器调用Servlet对象的service方法提供服务
5)若找到对应的Servlet对象
5.1)web容器直接调用Servlet对象的service方法提供服务
6)web容器关闭的时候/webapp重新部署的时候/该Servlet对象长时间没有用户再次访问的时候,web容器会将该Serlvet对象销毁,在销毁该对象之前,web容器会调用Servlet对象的destory方法,完成销毁之前的准备。
5、总结:
5.1)Servlet类的构造方法只执行一次
5.2)Servlet对象的init方法只执行一次
5.3)Servlet对象的service方法,只要用户请求一次,则执行一次
5.4)Servlet对象的destory方法,只执行一次
6、注意
init方法执行的时候,Servlet对象已经被创建好了。
destory方法执行的时候,Servlet对象还没有被销毁,即将被销毁
7、Servlet对象是单例,但是不符合单例测试,只能称为伪单例。真单例的构造方法是私有化的,Tomcat服务器是支持多线程的。所以Servlet对象在单实例多线程的环境下运行的。那么Servelet对象中若有示例变量,并且示例变量涉及到修改操作,那么这个Servlet对象一定会存在线程安全问题,不建议在Servlet对象中使用实例变量,尽量使用局部变量。
Servlet 的生命周期 及 注意事项 总结的更多相关文章
- Servlet的生命周期以及线程安全问题
一:Servlet生命周期图,以及注意事项 二:代码演示 LifeCycleServlet.java package cn.woo.servlet; import java.io.IOExceptio ...
- Servlet的生命周期及工作原理
Servlet生命周期分为三个阶段: 1,初始化阶段 调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...
- Servlet的生命周期
Servlet的生命周期 Servlet的生命周期是由tomcat服务器来控制的. 1 构造方法: 创建servlet对象的时候调用.默认情况下,第一访问servlet就会创建servlet对象只创建 ...
- Servlet的生命周期+实现方式
1.Servlet的生命周期: (1)被创建: 默认情况下,Servlet第一次被访问时,被服务器创建.会调用init()方法. 一个 ...
- Servlet基础(二) Servlet的生命周期
Servlet基础(二) Servlet的生命周期 Servlet的生命周期可以分为三个阶段: 1.初始化阶段 2.响应客户请求阶段 3.终止阶段 Servlet的初始化阶段 在下列时刻Servlet ...
- JSP Servlet WEB生命周期
[转载] JavaWeb的生命周期是由Servlet容器来控制的总的来说分为三个阶段1.启动阶段:加载web应用相关数据,创建ServletContext对象,对Filter和servlet进行初始化 ...
- servlet的生命周期与运行时的线程模型
第 14 章 生命周期 注意 讲一下servlet的生命周期与运行时的线程模型,对了解servlet的运行原理有所帮助,这样才能避免一些有冲突的设计. 如果你不满足以下任一条件,请继续阅读,否则请跳过 ...
- Servlet/JSP-01 Servlet及其生命周期
一.起步 1.新建一个类继承Servlet接口 public class HelloServlet implements Servlet { @Override public void destroy ...
- JavaWeb学习之Servlet(二)----Servlet的生命周期、继承结构、修改Servlet模板
[声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4140466.html 一.http协议回顾: 在上一篇文章中:JavaW ...
随机推荐
- js和css文件位置对页面性能的影响
翻译了一篇Performance上的关于页面性能的文章<DecIPhering the critical rendering path>,原文在这里.需要进一步整理和了解有关js.css等 ...
- vue框架学习笔记1
vue1-2:MVVM M:Model 数据模型,负责数据存储 V:View 视图,负责页面的显示 VM:View Model 负责业务处理,对数据进行加工,之后交给视图 下载地址: <!--中 ...
- sql数据库发布、订阅同步方式操作
Sql数据库发布订阅分为两个步骤:1.发布.2.订阅.首先在数据源数据库服务器上对需要同步的数据进行发布,然后在目标数据库服务器上对上述发布进行订阅. 一.发布. 发布需要用实际的服务器名称,不能使用 ...
- 页面上AJAX调用数据
<div class="section page9" data-page='9'> <div class="global-section-wrp med ...
- TTL-USB
CH340/ CH341T.CP2102.PL2303 .FT232: FT232:性能好,但价格贵:PL2303台湾的听说很多仿制的,CH340/341T/341A:国产的性能比PL2303好,并且 ...
- Gym 101047M Removing coins in Kem Kadrãn
给定一个序列,只能拿走D,隔壁的会翻转,问能否全部拿走. 注意到如果能拿走的话,拿D的顺序是没关系的.模拟即可 #include <cstdio> #include <cstdlib ...
- 初学makefile
makefile 需要用到 常用命令.shell.正则表达式.gcc,比较综合. 今天写了一个做一个记录,以后系统总结一下. 目录结构:russia---------include.src.mian. ...
- linux增加/删除虚拟IP地址
网卡上增加一个IP: ifconfig eth0:1 192.168.0.1 netmask 255.255.255.0 删除网卡的第二个IP地址: ip addr del 192.168.0.1 d ...
- PIO导出
1..HSSFWorkbook 声明一个工作簿,创建一个excel文件 //创建HSSFWork对象(excel的文档对象) HSSFWorkbook wb=new HSSFWorkbook(); / ...
- CCflow6 的使用
sELECT * FROM WF_GENERWORKFLOW WHERE WorkID=00000 -- 查看流程状态 wf_selectaccpter --查看流程某个节点下的人员 M ...