一、Servlet的生命周期
当客户端发送请求时,由web容器(Tomcat服务器)进行解析,根据请求判断相应的Servlet是否存在,若不存在则创建Servlet实例并调用init()方法进行初始化;之后调用service()方法,由service()判断客户端发起的请求方式,根据请求方式的不同调用不同的处理方法;最后,将处理的结果响应至客户端。
当客户端再次发送请求时,由web容器(Tomcat服务器)进行解析,根据请求判断相应的Servlet是否存在,存在则不再创建Servlet实例和调用Init()方法;而是直接调用service()方法,进行响应的请求处理,并将处理的结果响应至客户端。
只有调用destory()方法、关闭服务器或超过servlet设置的过期时间,servlet的生命才终止。
二、四个过程
servlet的生命周期大致分为四个阶段:
- 实例化 --通过无参构造
- 初始化 --Init()方法
- 服务 --service()方法
- 销毁 --destory()方法
代码如下(示例):
// 1.实例化
public HomeServlet() {
System.out.println("1.HomeServlet构造方法被调用");
}
// 2.初始化
@Override
public void init() throws ServletException {
System.out.println("2.HomeServlet实例初始化");
}
// 3.重写父类中的doGet()方法/doPost()方法
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HomeServlet的get()方法被请求到了....");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HomeServlet的post()方法被请求到了.....");
}
// 4.销毁
@Override
public void destroy() {
System.out.println("4.HomeServlet实例被销毁");
}
三、总结
Servlet被加载后,通过单例模式创建Servlet实例并调用InIt()方法且在Servlet整个生命周期中Init()方法只被调用一次;客户请求对应的servlet,web容器创建指定请求的HttpServletRequest对象和HttpServletResponse对象,之后调用servlet的service()方法,通过HttpServletRequest对象获取客户端请求的信息、HttpServletResponse对象向客户端返回响应的信息。;最后当web应用终止时调用destory()方法,释放servlet所占的资源。