说出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。

results matching ""

    No results matching ""