- 什么是Servlet的生命周期
- 创建时间
- 销毁时间
- 创建数量
- Servlet生命周期表示一个Servlet对象从出生到最后的死亡的guoc
- Servlet对象由谁维护
- Javaweb程序员无权干预Servlet对象的创建、对象上方法的调用
- 生命周期全权由Tomcat服务器负责
- 服务器又称WEB容器
- WEB容器管Servlet对象的生命周期
- 自己new的Servlet对象不受WEB容器管理
-
服务器启动的时候会解析web.xml文件,并不会实例化对象
-
如何让Tomcat启动时创建对象
加上标签
<load-on-stratup>
传入变量是一个非负整数,数字越小优先级越高 -
Servlet生命周期
- 默认情况服务器启动没有实例化对象
- 用户发送第一次请求时实例化Servlet对象,并且服务器马上调用init方法(init方法执行时,Servlet对象已经存在了)
- 用户发送第一次请求时,init方法执行后,Tomcat服务器马上调用Servlet的service方法
- 用户在第一次请求之后的所有请求,Servlet对象并没有新建,还是使用之前的Servlet对象,直接调用该Servlet的service方法
- Servlet对象是单例的,但是Servlet类并不符合单例模式 ,称之为假单例,真单例模式:构造方法是私有化的
- 无参数构造方法只执行一次,init方法也只调用一次
- 用户发送一次请求,service方法就被调用一次
- 关闭服务器时调用destroy方法
- 只在服务器关闭时调用一次
- 因为关闭服务器要销毁Servlet对象的内存
- 销毁对象内存之前调用destroy方法
-
init方法:
- 通常是完成初始化的
-
Service
- 核心方法
-
destory
- Servlet对象销毁前的准备工作,例如关闭流
-
当Servlet类中编写一个有参数的构造方法,没有手动编写无参数构造方法时会出现啥问题
- 报错:500
- 500是HTTP协议的错误状态码
- 500一般情况是因为服务器的java程序出现了异常(服务器端的错误都是500,指服务器内部错误)
- 如果没有无参数的构造方法,会导致500错误,无法实例化Servlet对象
- 在Servlet开发中,不建议程序员来定义构造方法,因为定义不当会导致无法实例化Servlet对象
-
无参数构造方法不能代替init方法
-
init、service、destroy:
- init、destroy方法都很少用
- 通常在init方法中做初始化操作,例如初始化数据库连接池、初始化线程池
- destroy中通常是关闭资源