Servlet的生命周期
1、被创建:
特点:执行init方法,只执行一次,一般用于加载资源。
启动时机:如何配置其启动时机呢,可以在web.xml中修改
<!--配置Servlet-->
<servlet>
<servlet-name>demo</servlet-name>
<servlet-class>cn.rayfoo.web.HelloServlet</servlet-class>
<!-- 配置启动时机,值为负数第一次被访问时创建 值为正数或0在服务器启动时创建 -->
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>demo</servlet-name>
<url-pattern>/demo</url-pattern>
</servlet-mapping>
问题:init只执行一次,说明Servlet在内存中只存在一个对象,说明Servlet时单例的。所以Servlet存在线程安全问题,但是加锁又太影响效率
解决方案:尽量不要在Servlet中定义成员变量,即时定义了也不要修改。
2、提供服务:
执行service方法,执行多次
特点:每次访问Servlet时,service方法都会被调用一次。
3、被销毁
执行destory方法,只执行一次
特点:只有服务器正常关闭时,才会执行destory方法。方法执行在服务器销毁之前,一般用于释放资源。