servlet对象的生命周期
-
什么是servlet对象生命周期?
- servlet对象什么时候被创建
- 什么时候被销毁
- 创建了几个
- 生命周期表示:一个servlet对象从出生到最后死亡,整个过程是什么样的
-
Servlet对象谁来维护
- 由Tomcat(各种服务器总体称为web容器)全权负责,程序员不能干预
-
我们自己new的servlet对象web容器管理不到
- web容器创建的servlet对象,这些servlet对象会被放到一个Hashmap集合,这样才能被Tomcat管理(所以自己创建的对象没有放进这个集合)
-
服务器在启动的时候Servlet没有被创建
- 测试方法:在一个Servlet对象里设置一个构造方法,启动服务器,发现方法并未被调用,所有得到结论
- 服务器启动的时候读取配置文件里的信息,将对象放入这个Hashmap集合里
-
怎么让服务器启动的时候就创建Servlet对象
- 在配置文件添加启动时创建的一条语句即可:1语句中间的数越小,优先级越高
-
Servlet对象生命周期
-
默认情况下,服务器启动的时候Servlet对象并没有被实例化
-
用户发送第一次请求的时候,Servlet对象被实例化
-
Servlet对象被创建出来之后,Tomcat服务器马上调用了init方法(所有:init方法执行时,Servlet对象已经存在,已经被创建出来了)
-
用户发送第一次请求的时候,init方法执行以后,Tomcat服务器马上调用Servlet对象的service方法
-
用户继续发送第二次或多次请求时,只有service方法再次执行
- 第一:Servlet对象是单例的(单实例的。但是要注意:Servlet对象是单实例的,但是Servlet类不符合单例模式,我们称它为假单例。之所以单例是因为Servlet对象的创建程序员管不着,这个对象的创建由Tomcat来说了算,Tomcat只创建了一个,所以导致了单例,但是是属于假单例。真单例模式,构造方法是私有化的)单例模式详细内容请看http://t.csdn.cn/c0V0M
- 第二:无参构造方法,init方法只在第一次用户发送请求的时候执行。也就是说无参构造方法只执行一次。init方法也只被Tomcat服务器调用一次
- 第三:只要用户发送一次请求,service方法必然被调用一次
-
关闭服务器的时候destroy方法只被Tomcat服务器调用一次
- destroy方法是什么时候被调用:
- 在服务器关闭的时候
- 因为服务器关闭的时候要销毁Servlet对象的内存
- 服务器在销毁Servlet对象内存之前,Tomcat服务器会自动调用Servlet对象的destroy方法
- destroy方法调用的时候,对象销毁了还是没有销毁
- destroy方法不是static,只有该方法执行完后,该内存才会被释放
- destroy方法是什么时候被调用:
-