Servlet的继承关系和生命周期
1.继承关系:
javax.servlet.Servlet接口->javax.servlet.GenericServlet抽象类
->javax.servlet.http.HttpServlet抽象子类
2.相关方法:
javax.servlet.Servlet:
(1)void init(config) -初始化方法
(2)void service(request, response) -服务方法 (这是个抽象方法,在HttpServlet中进行实现)
(3)void destroy() -销毁方法
主要说说这个service方法:它在实现时首先要有一个获取申请方式的操作:
String method = request.getMethod();
根据if判断,请求方式1不同,调用相应的do方法
而在这个HttpServlet中,do方法都差不多,需要自己去自己的servlet中改写do方法,不然未改写而贸然请求会报错
3.servlet的生命周期:
(1)servlet的生命周期对应三个方法 init() service() destroy()
(2)默认情况下,收到请求后开始实例化,初始化,并开始服务,后面只是开启服务,调用service方法;这种方式的启动速度很快,但是响应速度,特别是第一个用户的响应速度很慢,我们可以通过设置<load-on-startup>数字<load-on-startup>来设置servlet的启动先后顺序,这样设置后启动服务器时会耗时更多,因为启动即创建实例,初始化,但后续的响应速度很快,而且很公平;(其中数字越小,越先启动,0最小)
所以一个servlet类只会创建一个实例,即单例的;这种单例设计模式有弊端:线程不安全;
下面有个图:
所以我们一般不建议servlet类中定义成员变量,即使非要定义,也不要用它来做逻辑判断;