Servlet什么时候初始化?

时间:2021-10-22 21:15:49

Servlet什么时候初始化?

最近面试遇到了这样一道题,面试官问Servlet什么时候初始化?回答是:在web容器启动的时

候初始化,然后他笑了笑,我就一脸懵逼了。回来之后查了查资料,明白当时的回答是多么的傻!

以在这里总结大家之言,以提供给更多不解之人与之帮助,希望有所帮助!

一直一来都认为Servlet是在web容器启动的时候初始化,但仔细想想有很多地方可以推究。如

果有一万个servlet,那服务器启动的时候就要实例化一万个类,那就是要在内存(堆中)中创建一万

个对象,一次创建这么多对象,对于内存(堆中)而言负载量相当的大,有可能就会出现《内存溢出》

的异常,所以后来想想,应该是在请求的时候才去实例化的吧,这样的话,对于容器而言不用启动的时

候就加载那么多东西,感觉这就是请求时才加载的根本原因吧,纯属个人见解(以上是转自http://bl

og.csdn.net/wwhmj/article/details/51647063),希望各位有不同见解的

提出来,大家一起讨论。

如果没有设置loadOnStartup,则第一次请求的时候实例化
分三种情况:
loadOnStartup < 0 
即负数的情况下,web容器启动的时候不做实例化处理,servlet首次被调用时做实例化
这种情况和没有设置loadOnStartup是一样的。
loadOnStartup > 0
web容器启动的时候做实例化处理,顺序是由小到大,正整数小的先被实例化
loadOnStartup = 0
web容器启动的时候做实例化处理,相当于是最大整数,因此web容器启动时,最后被实例化


配置 web.xml 

配置一个普通的servlet 

  <servlet> 

    <servlet-name>AServlet</servlet-name> 

    <servlet-class>com.servlet.AServlet</servlet-class> 

    <load-on-startup>4</load-on-startup><!--加这个标签,tomcat启动时会自动加载

指定的servlet     值是servlet的加载顺序!!!   数字越小代表加载的优先级越高--> 

  </servlet>