一:servlet的生命周期
首先,我们应该进行如下的思考:servlet什么时候导入计算机的内存,又是什么时候被销毁的呢?
现在我们来举一个例子,假设你是一个店员,现在你已经打开了店门,但是还没有进去工作,而是在门外等待。这时候来了第一位顾客,于是你就要进去店里,为这个顾客服务了。这个顾客离开后,你也能跟着离开吗?显然不能。你只有在商店关门的时候你才可以离开。我们把这个例子引入到servlet的生命周期中。当打开了店门,意味着服务器的启动,但这个时候servlet并没有被初始化,也就是没有被调入内存中。当来了第一位顾客的时候,也就是需要调用这个servlet的时候,servlet就要被初始化并载入内存,于是servlet进入了店里进行工作。但是当这个任务完成了时候,也就是处理了这个顾客的请求后,servlet不能离开。它只有等到商店关门了,也就是服务器关闭的时候,才可以从内存中被销毁。
简单总结一下,servlet的生命周期就是从第一次调用一直到服务器关闭。
二:适当改变servlet的生命周期
还是接着上面那个例子,假设你是商店老板,你要求店员在商店开门的时候就马上进去。这个时候有没有什么办法呢?
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<!-- 配置Servlet -->
<!-- 配置servle类路径 -->
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>com.a.Hello</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 配置servlet访问方式 -->
<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/my</url-pattern>
</servlet-mapping>
</web-app>
在配置servlet的类路径的时候,在里面加上
<load-on-startup>1</load-on-startup>
就可以了。这样这个servlet的生命周期就是从服务器启动开始一直到服务器结束之后了。当你完成了这一步,恭喜你,又可以多剥削你的员工一些了。
另外,说明一下,这句代码里面的数字1是什么意思。当我们实际的进行开发时,肯定不会只有一个servlet,如果有多个servlet要求在服务器开始的时候就加载,就会存在一个加载顺序问题。这个数字1,就是指第一个被加载,2就是代表第二个。当然,不管数字是几,它都会在服务器启动之后都被加载完。