Servlet总结三:servlet对象生命周期[通俗易懂]

Servlet总结三:servlet对象生命周期[通俗易懂]Servlet对象的生命周期,javaweb程序员是无权干涉的,包括Servlet对象的相关方法调用,程序员也是无权干涉的。

大家好,欢迎来到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

(0)
上一篇 2023-01-03 09:53
下一篇 2023-01-03 09:53

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信