Sevlet的生命周期

引入

Servlet的生命周期是指: servlet类对象什么时候创建,什么时候调用什么方法,什么时候销毁。

这里要注意Servlet程序的生命周期由tomcat服务器控制的, 它的创建, 调用和销毁由tomcat服务器控制!!!!

Servlet重要的四个生命周期方法

构造方法

创建servlet对象的时候调用。默认情况下,第一次访问servlet的时候创建servlet对象 只调用1次。这说明servlet对象在tomcat是单实例的。

init方法

创建完servlet对象的时候调用。只调用1次。

service方法

每次发出请求时调用。调用n次。

destroy方法

销毁servlet对象的时候调用。停止服务器或者重新部署web应用时销毁servlet对象。只调用1次。

伪代码演示servlet的生命周期

Tomtcat内部代码运行: 1. 通过映射找到到servlet-class的内容,字符串: io.github.oncealong.ThirdSample 2. 通过反射构造ThirdSample对象 2.1. 得到字节码对象 Class clazz = class.forName("io.github.oncealong.ThirdSample"); 2.2. 调用无参数的构造方法来构造对象 Object obj = clazz.newInstance(); ---1.servlet的构造方法被调用 3. 创建ServletConfig对象,通过反射调用init方法 3.1. 得到方法对象 Method m = clazz.getDeclareMethod("init",ServletConfig.class); 3.2. 调用方法 m.invoke(obj,config); --2.servlet的init方法被调用 4. 创建request,response对象,通过反射调用service方法 4.1. 得到方法对象 Methodm m =clazz.getDeclareMethod("service",HttpServletRequest.class,HttpServletResponse.class); 4.2. 调用方法 m.invoke(obj,request,response); --3.servlet的service方法被调用 5. 当tomcat服务器停止或web应用重新部署,通过反射调用destroy方法 5.1. 得到方法对象 Method m = clazz.getDeclareMethod("destroy",null); 5.2. 调用方法 m.invoke(obj,null); --4.servlet的destroy方法被调用

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏GreenLeaves

C# this关键字(给底层类库扩展成员方法)

本文参考自唔愛吃蘋果的C#原始类型扩展方法—this参数修饰符,并在其基础上做了一些细节上的解释 1、this作为参数关键字的作用 使用this关键字,可以向t...

2377
来自专栏北京马哥教育

17个案例带你3分钟搞定Linux正则表达式

正则表达式是一种字符模式,用于在查找过程中匹配制定的字符。 元字符通常在Linux中分为两类: Shell元字符,由Linux Shell进行解析; 正则表达式...

3534
来自专栏liulun

Nim教程【十三】

类型转换 Nim支持显示类型转换和隐式类型转换 使用casts操作符完成显示类型转换工作, 显示类型转换工作是编译期完成的工作,是位模式的 隐式类型转换也是编译...

2226
来自专栏Coding迪斯尼

自制Monkey语言编译器:实现函数闭包功能和为语言增加复杂数据结构

1192
来自专栏python读书笔记

《算法图解》NOTE 2 数组、链表及选择排序1.数组2.链表3.选择排序法

1383
来自专栏程序员宝库

Java 中整型的缓存机制

本文将介绍Java中Integer的缓存相关知识。这是在Java 5中引入的一个有助于节省内存、提高性能的功能。首先看一个使用Integer的示例代码,从中学习...

933
来自专栏用户2442861的专栏

Java内存管理(一、内存分配)

关于Java内存分配,很多问题都模模糊糊,不能全面贯通理解。今查阅资料,欲求深入挖掘,彻底理清java内存分配脉络,只因水平有限,没达到预期效果,仅以此文对所...

7802
来自专栏PhpZendo

PHP 合并数组运算符 + 与 array_merge 函数

在 php 中对两个数组进行合并运算,通常使用 array_merge 和 加号(+)运算符,他们的区别是什么呢?先让我们看看下面的测试用例

1091
来自专栏一枝花算不算浪漫

[Java面试二]Java基础知识精华部分.

4059
来自专栏前端儿

大小写互换

  现在给出了一个只包含大小写字母的字符串,不含空格和换行,要求把其中的大写换成小写,小写换成大写,然后输出互换后的字符串。

1322

扫码关注云+社区

领取腾讯云代金券