1.Servlet简介
Servlet运行在服务器端,是由Web服务器负责加载的,是独立于平台和协议的Java应用程序。Servlet并不限制所使用的协议,但是使用最多的协议是HTTP协议。
2.Servlet的生命周期
servlet 运行在servlet容器中,由容器来管理其生命周期。servlet生命周期包含四个过程:
-
加载和实例化
加载和实例化servlet是由servlet容器来实现的。加载servlet之后,容器会通过Java的反射机制来创建servlet实例。 -
初始化
在servlet实例创建完之后,容器会调用servlet的init()方法来初始化该servlet对象。初始化的目的是让Servlet对象在处理客户端请求前先完成一些初始化工作。对于每个servlet实例只会调用一次init()方法。 -
执行
当客户端请求到来后,Servlet 容器首先针对该请求创建ServletRequest和ServletResponse两个对象,然后Servlet容器会自动调用Servlet的service()方法来响应客户端请求,同时把ServletRequest和ServletResponse两个对象传给service()方法。通过ServletRequest对象,Servlet实例可以获得客户端的请求信息,处理完请求后,则将响应信息放置在ServletResponse对象中。最后销毁ServletRequest和ServletResponse对象。 -
清理
当Servlet实例需要从服务中移除时,容器会调用destroy()方法,让该实例释放掉它所使用的资源,并将实例中的数据保存到持久的存储设备中。之后,Servet实例便会被Java的垃圾回收器所回收。在Servlet的整个生命周期中,初始化和销毁都只发生一次,service()方法的执行次数取决于Servet 被客户端所访问的次数。
下面对servlet生命周期中的3个重要方法做个说明。
(1) init()方法
该方法在javax.servlet. Servlet接口中定义。创建Servlet实例时会调用init()方法,在init()方法中完成类似于构造方法的初始化功能,其参数为ServletConfig的实例。init()方法结束后,Servlet就可以接受客户端请求。
在Servlet的整个生命周期中,只执行一次init()方法。
(2) service()方法
该方法用来响应客户端发出的请求。service()方 法使用ServletRequest 接口和ServletResponse接口的对象作为参数,其中,ServletRequest对象用来处理请求,ServletResponse对象用来发送响应。
serivice()方法执行时会检查HTTP请求的类型,并相应地调用doGet()、doPost()等方法请求。因此,通常的做法是,不使用sevice()方法,而直接使doGet()、 doPost()等方法来处理。
(3) destroy()方法
当不再需要Servet实例或重新装入时,destroy()方法被调用。 使用destroy()方法可以释放掉所有在init()方法中申请的资源。一个 Servlet 实例一旦终止, 就不允许再次被调用,只能等待被卸载。
destroy()方法通常用来执行 一些清理任务,在destroy()方法中一 般安排释放资源的代码。