Java Web基础与实例教程
上QQ阅读APP看书,第一时间看更新

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。