一、Servlet简介
Servlet是在JSP之前推出的,应用于服务端的Java程序,可以生成动态的Web页面。事实上,JSP在运行前还需要被编译成Servlet。
Servlet运行在服务器端,是由Web服务器负责加载的,独立于平台和协议的Java应用程序。JSP改变了Servlet提供HTTP服务时的编程方式。但是内部机制上,每一个JSP都被处理成一个Servlet。Servlet并不限制所使用的协议,使用最多的协议是HTTP协议。
二、Servlet的生命周期
Servlet运行在Servlet容器中,由容器来管理其生命周期。Servlet的生命周期包括4个过程:
(1)加载和实例化
加载和实例化Servlet是由Servlet容器来实现的。加载Servlet之后,容器会通过Java的反射机制来创建Servlet的实例。
(2)初始化
在Servlet的实例创建之后,容器会调用Servlet的init()方法来初始化该Servlet对象。初始化的目的是让Servlet对象在处理客户端请求前先完成一些初始化工作。对于每个Servlet实例,只会调用一次init方法。
(3)执行
当客户端请求到来后,Servlet容器首先针对该请求创建ServletRequest和ServletResponse两个对象,然后Servlet容器会自动调用Servlet的service()方法来响应客户端请求,同时把ServletRequest和ServletResponse两个对象传给Service()方法。通过ServletRequest对象,Servlet实例可以获得客户端的请求信息,处理完请求后,则将响应信息放置在ServletResponse对象中。最后销毁ServletRequest和ServletResponse对象。
注:在service方法调用前,init()方法必须已经成功执行
(4)清理
当Servlet实例需要从服务中移除时。容器会调用destroy()方法,让该实例释放掉它所使用的资源,并将实例中的数据保存到持久的存储设备中。之后,Servlet实例便会被Java的垃圾回收器所回收。
在Servlet的整个生命周期中,其初始化和销毁都只发生一次,service()方法的执行次数取决于Servlet被客户端所访问的次数。