选择题 下列有关 Servlet 的生命周期,说法不正确的是()。

Drop1 2008-11-03 03:56:42
下列有关Servlet的生命周期,说法不正确的是()。

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

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

C、在销毁阶段,执行destroy()方法后系统立刻进行垃圾回收。

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


分析:

A项:创建Servlet的实例是由Servlet容器来完成的,且创建Servlet实例是在初始化方法init()之前,所以,A项错误。

B项:正确。

C项:Servlet容器(如:Tomcat)调用某一个Servlet中的destroy()方法时,就会销毁此Servlet以释放资源,我认为释放资源指的就是垃圾回收,所以C项正确。

D项:此选项中的“服务器停止”我认为指的意思就是“Servlet容器(如Tomcat,此处我们就拿Tomcat来说。)停止”,在Tomcat容器停止时,Tomcat容器就会自动调用Servlet中的destroy()方法来销毁(或叫做卸载)这个Servlet,所以,我认为此项正确。



综上,我认为答案是:A。


以上的分析中,哪里有错误,希望各位朋友帮助指正,谢谢大家。
...全文
3219 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
Drop1 2008-12-09
  • 打赏
  • 举报
回复
书上给的标准答案是:AC,我现在也认为C项是错误的。

D项我认为是正确的。
sosoone 2008-11-08
  • 打赏
  • 举报
回复
顶 C
Drop1 2008-11-08
  • 打赏
  • 举报
回复
见解独到!
oo1987416 2008-11-07
  • 打赏
  • 举报
回复

C、在销毁阶段,执行destroy()方法后系统立刻进行垃圾回收。


肯定错的。

如果响应请求时发生异常,则容器通过调用Servlet的destory()方法来卸载实例。在调用destory()方法后,就会从内存中释放Servlet实例,给Servlet机会来清理持有的资源(比如内存,文件处理和线程),以确保在内存中所有的持续状态和Servlet的当前状态是同步的。
所以 调用该方法后并不是立刻进行垃圾回收,而是要通过一次Servlet.
大刘刘 2008-11-07
  • 打赏
  • 举报
回复
路过,学习。
Drop1 2008-11-07
  • 打赏
  • 举报
回复
感谢大家的回复。
huangwen9 2008-11-07
  • 打赏
  • 举报
回复
严格来说只有B是正确的
容器在实例化一个servlet之后会调用它的init()方法,告诉它我要把你吃进肚子里了,有啥事情要做的话赶快在init()里面做完。所以A错误。
init()方法成功的执行以后,容器会使用servic()方法来处理请求。如果是Http的请求,那么service()会把请求发送到doXXX去处理。所有B正确。
有一天,可能是容器不想要这个servlet了(不一定非要是容器停止,比如可能是容器拉肚子了,所以D错误),总之,容器决定不要这个servlet了,那么他会调用servlet的destroy()方法告诉它,我要把你拉出来了,有要释放的资源赶快在destroy()里面放完。servlet被拉出来了,但是JVM不一定在容器拉完就去清理,它可能要茅坑慢了才去清理。所以C也错误。

此题应该是要求选正确的,嘿嘿

os340223 2008-11-06
  • 打赏
  • 举报
回复
综上所述,还得看题目要求了。
tojavastudy 2008-11-06
  • 打赏
  • 举报
回复
A
是肯定错了的~~~
niexinghua1983 2008-11-05
  • 打赏
  • 举报
回复
我也觉得A和C都有问题
wjalan 2008-11-05
  • 打赏
  • 举报
回复
在销毁阶段,执行destroy()方法后系统立刻进行垃圾回收
错的
系统垃圾回收。是指收回servlet本身所占用的资源.而不是servlet内部引用所占用的资源

http://download.csdn.net/source/752622
看看这个是一个什么东西呢?
wgq837051 2008-11-05
  • 打赏
  • 举报
回复
A错,BCD对
加载类--实例化--初始化--服务--销毁,实例化是由servlet容器做的,我们不用管,故A错,
microns 2008-11-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 DiscussQuestions 的回复:]
A错,BCD对
加载类--实例化--初始化--服务--销毁,实例化是由servlet容器做的,我们不用管,故A错,
[/Quote]

正解!
复习。。。
雨雪飘零 2008-11-04
  • 打赏
  • 举报
回复
【C、在销毁阶段,执行destroy()方法后系统立刻进行垃圾回收。 】

destory() 会释放 servlet 占用的资源, 但是 servlet 的回收那就不一定了, JVM 的回收机制没有那么简单。
cuilike 2008-11-04
  • 打赏
  • 举报
回复
复习下。。
wykris 2008-11-04
  • 打赏
  • 举报
回复
【C、在销毁阶段,执行destroy()方法后系统立刻进行垃圾回收。 】
真的一定会立即进行垃圾回收吗?
DiscussQuestions 2008-11-03
  • 打赏
  • 举报
回复
A错,BCD对
加载类--实例化--初始化--服务--销毁,实例化是由servlet容器做的,我们不用管,故A错,

有人为C不解,但是C确实是正确的!~!
java__king 2008-11-03
  • 打赏
  • 举报
回复
mark
nf0011468 2008-11-03
  • 打赏
  • 举报
回复
我也觉的是A,init()方法貌似是初始化Servlet的初始化参数用的,不是创建Servlet实例,是创建了Servlet实例后才调用init()方法.不过看C的语气感觉也有点不对劲啊....但我更倾向于A
ruoye_2008 2008-11-03
  • 打赏
  • 举报
回复
我也认为第一个是错的,
当Servlet在被调用后,就先自动初始化,初始化再调用init()方法。

应该在初始化方法init()方法中创建Servlet实例。
我认为Servlet是容器自动创建的,无需要init()方法中创建。
加载更多回复(2)

67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧