Servlet对象由谁来维护
- Servlet对象的创建,对象上方法的调用,对象的销毁,都是由Tomcat服务器(WEB Container)全权负责的
- WEB容器来管理Servlet对象的死活
Servlet对象什么时候被创建
默认情况Tomcat服务器在启动的情况下,Servlet对象并不会被实例化,直至用户发送请求。这样做的原因是为了节省内存空间,如果提前将所有的Servlet对象都创建出来,内存资源将被大量占用。所以只需等用户发送请求,将响应的Servlet对象创建出来即可
用户自己创建的Servlet对象接收WEB容器的管理吗
- 我们自己new的对象是不受Web容器的管理的
- WEB容器创建的Servlet对象都会存放到一个HashMap集合当中,只有放到HashMap集合当中的Servlet对象才能被WEB Container管理
自己new的Servlet对象不会被WEB容器管理。 - WEB容器底层有一个HashMap集合,存放Servlet对象和请求路径之间的关系。
怎样让服务器启动的时候创建Servlet对象
利用标签,后面的数字越大,优先级越低。
<servlet>
<servlet-name>aServlet</servlet-name>
<servlet-class>com.kun.javaweb.AServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
Servlet对象生命周期
- 默认情况下服务器启动的时候AServlet对象并没有被实例化
- 用户发送第一次请求的时候,控制台输出了以下内容
AServlet无参构造方法执行了!
AServlet’s init method execute!
AServlet’s service method execute! - 根据以上内容得出结论
(1)用户在第一次发送请求的时候Servlet对象被实例化,
(2)AServlet对象被创建出来后,Tomcat服务器立即调用了AServlet对象的init方法(init方法执行的时候,AServlet对象已经被创建出来)
(3)用户发送第一次请求的时候,init方法执行完毕,Tomcat服务器立即调用AServlet对象的service方法
(4)用户发送第二次请求,控制台输出了下面的内容
AServlet’s service method execute!
(5)由此可知,当用户发送第二次及更多请求的时候,Servlet对象并没有新建,还是使用之前创建好的Servlet对象方法。
第一,Servlet对象是单实例的(但是Servlet类并不符合单例模式,我们称之为假单例。之所以单例是因为Servlet对象的创建
JavaWeb程序员管不着,有Tomcat来管理。)
第二,无参构造方法和init方法只在用户第一次发送请求的时候执行一次。
第三,用户只要发送请求,service方法就执行一次 - 关闭服务器的时候,控制台输出了下面的内容
AServlet’s destroy method execute - 根据以上内容可以得出
(1)Servlet对象的destroy方法只被Tomcat服务器关闭的时候调用一次。
(2)服务器关闭的时候会销毁AServlet对象的内存
(3)服务器在销毁AServlet对象之前,会调用AServlet对象的destroy方法 - destroy方法被调用的时候,Servlet对象还没有被销毁。destroy方法调用之后,内存才会被释放。