跟客户端的Applet相似,Servlet(这里Servlet的概念又回到了最原始的含义)也遵循严格的生命周期。在每个Servlet实例的生命中有三种类型的事件,这三种事件分别对应于由Servlet引擎所唤醒的三个方法:
1.init()。当Servlet第一次被装载时,Servlet引擎调用这个Servlet的init()方法,只调用一次。如果某个Sevlet需要特殊的初始化需要。那么Servlet编写人员可以重写该方法来执行初始化任务。这是一个可选的方法。如果某个Servlet不需要初始化,那么默认情况下将调用它父类的init方法。系统保证,在init方法成功完成以前,是不会调用Servlet去处理任何请求的。
2.service()。这是Servlet最重要的方法,是真正处理请求的地方。对于每个请求,Servlet引擎将调用Servlet的service方法,并把Servlet请求对象和Servlet响应对象最为参数传递给它。
3.destroy()。这是相对于init的可选方法,当Servlet即将被卸载时由Servlet引擎来调用,这个方法用来清除并释放在init方法中所分配的资源。
Servlet的生命周期可以被归纳为以下几步:
(1) 装载Servlet,这一项操作一般是动态执行的。然而,Servlet通常会提供一个管理的选项,用于在Servlet启动时强制装载和初始化特定的Servlet
(2) Server创建一个Servlet实例
(3) Server调用Servlet的init方法
(4) 一个客户端请求到达Server
(5) Server创建一个请求对象
(6) Server创建一个响应对象
(7) Server激活Servlet的service方法,传递请求和响应对象作为参数
(8) service方法获得关于请求对象的信息,处理请求,访问其他资源,获得需要的信息
(9) service方法使用响应对象的方法。将响应传回Server,最终到达客户端。Service方法可能激活其他方法以处理请求。如doGet,doPost或其他程序员自己开发的方法
(10) 对于更多的客户端请求,Server创建新的请求和响应对象,仍然激活此servlet的service方法,将这两个对象作为参数传递给它,如此重复以上的循环,但无需再次调用init方法,Servlet一般只初始化一次
(11) 当Server不再需要Servlet时,比如当Server要关闭时,Server调用Servlet的destroy
至此关于Servlet的内容已经讲解完毕,读者通过对比Servlet与传统静态网页的区别,应该能大概理解Web应用程序的概念,Web应用的出现,使得呆板的Web页面变得生动,具有交互能力。Java在Web应用方面算不上独树一帜,但是却是做的相当优秀的。通过Servlet与下面我们要讲解的JSP的配合,可以方便的构建出功能强大的Web应用。
学习Servlet,其实最主要的已经不是Java本身,大家也已经看到Servlet和一般Java程序是没有什么区别的。要学好Servlet,除了掌握基本Servlet
API之外,最关键的还在于如何从整体上把握整个Web应用,如何合理的使用Servlet,使Servlet在构建Web网站的时候起到画龙点睛的作用,而不是复杂冗余的重复性劳动。在真正编写Servlet的时候,一般是没有什么大的困难的。所以读者在学习之余,最好能找一些规模大一点的例子,通过阅读代码,分析结构,更好的掌握Servlet的使用方法,知道什么时候该用Servlet实现,什么时候应该用其他的方法实现更为合适,而不必深究Servlet的语法或其他的一些小技巧。对于那些对Web网站不熟悉的读者,在学习的时候可能有困难,那么我们的建议是,先去学习基本的Web网站的知识。可以这么说Servlet只是一个工具,思想是需要读者在实践中慢慢体会的,当你有了成熟的思想之后再来学习Servlet,一定会有驾轻就熟的感觉的。
|