说出Servlet的生命周期,并说出Servlet和CGI的区别?
参考答案
Servlet生命周期
Servlet的生命周期分为这样几个阶段:实例化和初始化、服务、销毁。
1. 实例化和初始化阶段
- 如果Servlet配置时配置了
<load-on-startup>
标签,那么在应用程序启动时,会由Servlet容器加载Servlet.class,并创建Servlet实例,接下来调用init()方法初始化。 - 如果没有配置
<load-on-startup>
标签,那么在该Servlet第一次被访问时,执行类加载,创建实例和调用init()方法。 - 实例化和初始化在整个生命周期中只会执行一次,因此,每个servlet的实例也仅存在一个。
2. 服务阶段
- 当请求匹配到Servlet后,会执行Servlet中的service()方法。
- 如果Servlet没有重写service()方法而是重写了doGet()或doPost()方法,那么会根据请求的类型调用相应的doGet()或doPost()方法。
- 服务阶段的这些方法,会被反复执行,一次请求执行一遍。
3. 销毁阶段
- 当应用程序从服务器删除,或是服务器停止时,会调用Servlet的destroy() 方法进行销毁操作。
CGI 与Servlet的区别
- CGI 即通用网关接口,跟Servlet类似,也属于开发动态网页的技术。
- CGI 程序运行需要web服务器的支持,例如apache,而Servlet需要支持java ee的web服务器支持,如tomcat
- CGI 可以使用多种语言开发,如Perl,PHP等,Servlet只能由java语言实现
- CGI 是以进程为单位处理请求,Servlet是以线程为单位处理请求。显然,在高并发下CGI程序效率要低于Servlet。