【Java笔试题】Servlet的生命周期

1.下列有关Servlet的生命周期,说法不正确的是?


正确答案: A   

A 在创建自己的Servlet时候,应该在初始化方法init()方法中创建Servlet实例

B 在Servlet生命周期的服务阶段,执行service()方法,根据用户请求的方法,执行相应的doGet()或是doPost()方法

C 在销毁阶段,执行destroy()方法后会释放Servlet 占用的资源

D destroy()方法仅执行一次,即在服务器停止且卸载Servlet时执行该方法


Servlet的生命周期分为5个阶段:加载、创建、初始化、处理客户请求、卸载。
(1)加载:Servlet容器(Tomcat)通过类加载器加载servlet文件(.class)
(2)创建:通过调用servlet构造函数创建一个servlet对象
(3)初始化:调用init方法初始化
(4)处理客户请求:每当有一个客户请求,容器会创建一个线程来处理客户请求
(5)卸载:调用destroy方法让servlet自己释放其占用的资源
servlet是由Servlet容器负责加载Servlet类,创建Servlet对象并实例化,然后调用Servlet的init方法,进行初始化,之后调用Service方法。实例化和初始化不同。先实例化,再初始化。

serlvet是单实例多线程
默认第一次访问的时候,服务器创建servlet,并调用init实现初始化操作.并调用一次service方法
每当请求来的时候,服务器创建一个线程,调用service方法执行自己的业务逻辑
当serlvet被移除的时候服务器正常关闭的时候,服务器调用servlet的destroy方法实现销毁操作.


2.下面有关servlet中init,service,destroy方法描述错误的是?

正确答案: D   

A init()方法是servlet生命的起点。一旦加载了某个servlet,服务器将立即调用它的init()方法
B service()方法处理客户机发出的所有请求
C destroy()方法标志servlet生命周期的结束
D servlet在多线程下使用了同步机制,因此,在并发编程下servlet是线程安全的

Servlet是线程不安全的,在Servlet类中可能会定义共享的类变量,这样在并发的多线程访问的情况下,不同的线程对成员变量的修改会引发错误

init方法: 是在servlet实例创建时调用的方法,用于创建或打开任何与servlet相的资源和初始 化servlet的状态,Servlet规范保证调用init方法前不会处理任何请求 

 service方法:是servlet真正处理客户端传过来的请求的方法,由web容器调用, 根据HTTP请求方法(GET、POST等),将请求分发到doGet、doPost等方法 

destory方法:是在servlet实例被销毁时由web容器调用。Servlet规范确保在destroy方法调用之 前所有请求的处理均完成,需要覆盖destroy方法的情况:释放任何在init方法中 打开的与servlet相关的资源存储servlet的状态

你可能感兴趣的:(JavaWeb,面/笔试题)