什么是Servlet生命周期?
什么时候被创建?
什么时候被销毁?
Servlet对象的创建,对象上方法的调用,最终的销毁是由WEB容器(Tomcat服务器)全权负责
创建Servlet对象
第一步创建模块
第二步添加支持框架
第三步创建类包
第四步创建类
第五步添加架包
服务器lib包
第六步引进Servlet五个方法
Alt+Enter
第七步编写无参数构造方法
.sout快捷键
第八步配置web.xml
第九步 研究服务器在启动Servlet对象有没有被创建出来(默认情况下)?
如果构造方法不执行,服务器启动的时候就不会创建AServlet对象
部署服务器
Dbug模式启动起来
测试结果得出:默认情况下,服务器在启动的时候Servlet对象并不会被实例化
这个设计是合理的。用户没有发送请求之前,如果提前创建出来所有的Servlet对象,必然是耗费内存的,并且创建出来的Servlet如果一直没有被用户访问,显然一直占内存,所以没必要先创建。
怎么让服务器启动的时候创建Servlet对象呢?
一般情况下不会配置
加一个子标签”在启动的时候加载Servlet对象"
正整数:数字越小,优先级就越高
Servlet对象的生命周期
init方法
service方法
destory方法
服务器启动,AServlet对象还没有被服务器创建出来
清除控制台所有信息
用户在浏览器发送请求
本机地址加项目名加路径
默认情况下服务器启动的时候ASevlet对象并没有被实例化
用户发送第一次请求的时候控制台输出了以下内容
根据以上输出内容得出结论:
- 用户在发送第一次请求的时候Servlet对象被实例化。(AServlet的构造方法被执行了,并且执行的是无参数构造方法)
- AServlet对象被创建出来之后,Tomcat服务器马上调用了AServlet对象的init方法。(init方法在执行的时候,AServlet对象已经存在了,已经被创建出来了)
init方法和无参构造方法只会执行一次
Servlet对象并没有新建,直接调用之前的Service方法:单例
用户第一次请求是不会创建AServlet对象,Tomcat服务器先解析web.xml文件,类名和路径是绑定在一起的,接下来用户开始发送第一次请求,通过请求路径找到类名,找到类名通过反射机制会调用AServlet类无参数构造方法,所以无参数构造方法先执行(通过请求路径去容器里面找AServlet对象有没有被创建出来)
关闭服务器
destory方法执行的时候AServlet方法还在,调用之后才会销毁。