上一节介绍了tomcat的体系结构,这节主要介绍一下servlet的生命周期,即servlet从创建到销毁的过程。
servlet,简单的说就是java接口,和J2SE中标准接口差不多,只不过servlet是用来开发动态web应用的。
servlet的实现方式共用三种:
(1)一种是实现servlet接口,这是最原始的,但是通过此,可以对servlet的生命周期理解的最深刻
(2)继承GenericServlet抽象类,该抽象类实现了servlet接口,相当于对servlet进行了一些封装。
(3)继承HttpServlet类,该类继承了GenericServlet类,又是对GenericServlet的一层封装,一般都是通过该方式实现servlet。
下面通过介绍第一种方式来理解servlet生命周期。
通过查阅servlet 的api,可以发现需要实现以下几个方法:
主要需要实现的是destroy、init、service函数。
从字面意思就可以理解:
(1)init方法的主要作用是初始化,将servlet类加载进内存,并创建一个servlet对象,该方法只被调用一次
(2)service方法主要提供服务,我们的业务逻辑就是写在里面。没当有请求时,该方法都会被调用一次。
(3)destroy方法的作用是销毁servlet对象,该方法也只被调用一次。
那上述方法到底是谁在调用?
tomcat服务器是分模块的,主要分为web服务器模块、jsp容器模块、servlet容器模块。web服务器模块就是上述说的调用者。web服务器的主要作用是接收客户端发来的http请求,寻找合适的jsp或者servlet处理,然后接收jsp和servlet的处理结果,以html的形式发回给客户端。
下面详细讲解一下上述过程,从中理解servlet的生命周期。
(1)web服务器从客户端接收到http请求之后,先查看内存中是否已经存在所请求的servlet对象,如果没有,则执行(2),否则执行(3)
(2)web服务器调用servlet类的init方法,将servlet加载到内存,同时生成一个servlet对象,有且仅有一个servlet对象对外服务,采用的创建模式是单例模式
(3)web服务器将http请求封装成ServletRequest对象,同时也生成一个ServletResponse对象,将这两个对象作为参数调用service方法。只要有一个请求,该方法就会被调用一次。
(4)当项目需要reload或者tomcat重启或者关机时,servlet对象都会被销毁,此时会调用destroy方法,该方法只会被调用一次。
综上:servlet的生命开始于第一次请求、service方法会被多次调用、结束于reload或者tomcat重启等情况。
以上就是介绍了servlet的生命周期,下一节介绍一下如何在myeclipse中开发、发布servlet。