大家好,欢迎来到IT知识分享网。
1、什么是生命周期?
生命周期表示一个Java对象从最初被创建到最终被销毁,经历的所有过程
2、Servlet对象的生命周期是谁来管理的?程序员可以干涉吗?
- Servlet对象的生命周期,javaweb程序员是无权干涉的,包括Servlet对象的相关方法调用,程序员也是无权干涉的
- Servlet对象从最初的创建,方法的调用,以及最后被销毁,是由web容器来管理的
- Web Container管理Servlet对象的生命周期
- 默认情况 下,Servlet对象在Web容器启动阶段不会被实例化。【若希望在web服务器启动阶段实例化Servlet对象,可以进行特殊设置】
3、描述Servlet对象生命周期
1)浏览器访问URL:http://localhost:8080/web_war_exploded/hello
2)web容器截取请求路径:/web_war_exploded/hello
3)web容器在容器上下文中找请求路径/web_war_exploded/hello对应的Servlet对象
4.1)若没有找到对应的Servlet对象
- 会通过web.xml文件中的相关信息,得到请求路径/web_war_exploded/hello对应的Servlet完整类名
- 通过反射机制,调用Servlet类的无参构造方法完成Servlet对象的实例化
- web容器调用Servlet对象的init()方法完成初始化
- web容器调用Servlet对象的service()方法提供服务
4.2)若找到对应的Servlet对象
- web容器直接调用Servlet对象的service()方法提供服务
5)Servlet对象销毁
- web容器关闭的时候、webApp重新部署的时候、该Servlet对象长时间没有用户访问的时候,web容器会将Servlet对象销毁,在销毁Servlet对象前,会调用对象的destroy()方法进行销毁前的准备
总结
- Servlet对象的构造方法只执行一次
- Servlet对象的init()方法只执行一次
- Servlet对象的service()方法,只要用户请求一次,则执行一次
- Servlet对象的destroy()方法只执行一次
注意
- init()方法执行的时候,Servlet对象已经被创建好了 destroy()方法执行的时候,Servlet对象还没被销毁,即将销毁
- Servlet对象是单例,只实例化一个Servlet对象,多用户多线程访问是,使用的是一个Servlet对象; Tomcat是支持多线程的,所以Servlet对象是在单实例多线程的环境下运行的; 那么Servlet对象中若有实例变量,并且实例变量涉及到修改操作,那么这个Servlet对象一定会存在线程安全问题,不建议在Servlet对象中使用实例变量(类的属性),尽量使用局部变量;
Servlet对象实例化之后存储到哪里了
大多数的Web容器都是将该Servlet对象以及对应的url-pattern存储到Map集合中了 在web容器中有这样一个Map集合 Map<String, Servlet>
key value
--------------------------------------
/login LoginServlet对象的引用
/delete DeleteServlet对象的引用
/insert InsertServlet对象的引用
IT知识分享网
启动阶段解析的web.xml文件,做了什么
服务器启动阶段会解析各个webapp中的web.xml文件,做了什么?
在web容器中有这样一个集合 Map<String, String>
IT知识分享网key value
---------------------------------------------------------
/login cn.qkmango.javaweb.servlet.LoginServlet
/delete cn.qkmango.javaweb.servlet.DeleteServlet
/insert cn.qkmango.javaweb.servlet.InsertServlet
实际上,服务器启动时会解析web.xml文件,并且将解析的数据存放在Map集合中,当在浏览器中输入请求的路径时,web容器在容器会找请求路径对应的Servlet对象,如果没有找到,实际上不是去web.xml文件中找此路径对应的完整类名,而是去此Map集合中查找
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/7022.html