servlet的生命周期
当客户端的请求到达Tomcat,Tomcat会创建一个线程来接收、处理、响应客户端请求,客户端在请求某个Servlet类时,线程需要通过这个Servlet类的实例来调用service方法、调用doGet/doPost..方法来处理响应请求,这个Servlet类的实例是何时创建、何时销毁的呢?
Servlet实例的生命周期指的是一个Servlet类的实例从创建到销毁的过程。
Servlet类是单实例多线程的,一个Servlet类自始至终只会创建一个对象;
如果当前Servlet类没有配置
当客户端第一次请求Servlet时,创建当前Servlet类的实例,然后使用这个实例调用service(ServletRequest, ServletResponse)方法——service(HttpServletRequest, HttpServletResponse)方法——doGet/doPost处理客户端请求;当客户端请求再次到达时将不会重新创建Servlet实例,直接使用第一次创建的实例调用方法进行响应;
如果当前Servlet类配置了
当服务器启动时就会创建Servlet类的实例,无论客户端第一次请求这个Servlet类,还是再次请求都不会创建Servlet类实例,直接使用服务器启动时创建的Servlet实例来接收、处理、响应客户端请求;
当服务器关闭时,Serlvet类的实例会被销毁。
配置load-on-startup的两种方式:
xml配置
<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>com.qfedu.servlets.TestServlet</servlet-class>
<!--如果有多个Servlet都配置了load-on-startup,里面的数字就是在服务器中创建实例的顺序-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
注解配置