
2.1.8 Servlet程序的生命周期
运行“传统”Java程序时,Java虚拟机将Java类的字节码文件加载到内存,然后调用构造方法实例化一个Java对象,接着运行对象的main()方法。main()方法运行结束后,内存中的对象被清除。下次再运行该Java程序时,重复上述步骤。传统Java程序的生命周期如图2-16所示。
由于许多浏览器用户可以同时运行一个Servlet程序,如果Servlet程序也和传统的Java程序一样,每次运行时先将字节码文件加载到内存、再创建对象,效率将大打折扣。Servlet程序的生命周期如图2-17所示。

图2-16 传统Java程序的生命周期

图2-17 Servlet程序的生命周期
在浏览器用户1访问Servlet程序时,Servlet字节码文件将被加载到Tomcat服务器内存,Tomcat先调用构造方法实例化Servlet对象,然后调用init()方法初始化该Servlet对象,接着调用doGet()或者doPost()方法,服务第一个浏览器用户。
其他浏览器用户再次访问该Servlet程序时,Tomcat将直接使用内存中的Servlet对象,服务其他浏览器用户。
停止Tomcat服务后,内存中的Servlet对象被销毁。
以ABCServlet为例,Servlet程序的生命周期可以简要描述为:
ABCServlet第一次接收到GET请求: ABCServlet()→init()→doGet()
其他GET请求:→doGet()→doGet())→...→doGet()
停止Tomcat服务:→destroy()
说明
为了提高开发效率,Eclipse提供了一种机制。Tomcat启动后,Eclipse能够自动判断Servlet源代码是否更改。若更改,Eclipse会自动编译Servlet源代码,生成Servlet字节码文件,并自动重启Tomcat。