我不明白web-container在部署web-app时是否创建了servlet的实例,或者在服务器从客户端获取请求之后创建了这个servlet实例?
答案 0 :(得分:0)
这取决于web.xml中的servlet定义。
如果指定load-on-startup元素,容器将预加载您的servlet。
如果未指定load-on-startup,则容器将推迟创建servlet,直到需要它为止。
来自Oracle文档:
此元素的可选内容是一个整数,表示相对于Web应用程序的其他Servlet加载和初始化Servlet的顺序。空白表示订单无关紧要,只要在启动包含Web应用程序的过程中加载并初始化Servlet。
示例:见下文。容器将首先预加载FooServlet和BarServlet,但在需要之前不会加载BingServlet。
<servlet>
<servlet-name>FooServlet</servlet-name>
<display-name>Foo Servlet</display-name>
<servlet-class>com.foo.FooServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>BarServlet</servlet-name>
<display-name>Bar Servlet</display-name>
<servlet-class>com.bar.BarServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet>
<servlet-name>BingServlet</servlet-name>
<display-name>Bing Servlet</display-name>
<servlet-class>com.bing.BingServlet</servlet-class>
</servlet>