欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Servlet的生命周期

程序员文章站 2022-06-03 11:33:14
...

Java中,任何对象都有声明周期
按照功能的不同,可以将Servlet的生命周期,分为三个阶段
初始化阶段、运行阶段和消耗阶段

初始化阶段

当客户端响应Servlet容器,发出HTTP请求要去访问Servlet时,Servlet容器
首先,解析请求,检查内存中是否已经有了该Servlet对象
如果,存在直接使用该Servlet对象
如果,不存在,就创建Servlet实例对象,然后,通过调用init()方法,实现Servlet的初始化工作

注意
在Servlet的整个生命周期内,它的init()方法,只能被调用一次

运行阶段

这是Servlet生命周期中,最重要的阶段
这个阶段,Servlet容器会为这个请求创建,代表HTTP请求的ServletRequest对象和代表HTTP响应的ServletResponse对象
然后,将它们作为参数传递给Servlet的service()方法
Service()方法,从ServletRequest对象中获得客户请求信息,并处理该请求,通过ServletResponse对象,生成响应结果

在Servlet的整个生命周期内,对于Servlet的每一次访问请求,Servlet容器都会调用一次Servlet的service()方法,并且,创建新的ServletRequest对象和ServletResponse对象,也就是说,service()方法,在Servlet的整个生命周期中会被多次调用

销毁阶段

当服务器关闭,或者Web应用被移除出容器时,Servlet随着Web应用的销毁而销毁
在销毁Servlet之前,Servlet容器会调用Servlet的destroy()方法,以便让Servlet对象释放它所占用的资源
在Servlet的整个生命周期中,destroy()方法,也只被调用一次

注意
Servlet对象一旦创建,就会驻留在内存中,等待客户端的访问,直到服务器关闭,或者Web应用被移除出容器时,Servlet对象才被销毁

示例程序

在HelloWorldServlet中,重写init()方法和destroy()方法
HelloWorldServlet.java
代码如下

package cn.itcast.firstapp.servlet;
import javax.servlet.*;
public class HelloWorldServlet extends GenericServlet{
public void init(ServletConfig config)throws ServletException{
System.out.println("init method is called");
}
public void service(ServletRequest request, ServletResponse response) 
throws ServletException{        
System.out.println("Hello World");
}
public void destroy(){
System.out.println("destroy method is called");
}
}

重新编译,HelloWorldServlet.java文件

Servlet的生命周期

将编译后生成的class文件,复制到chapter04的WEB-INF\classes目录
启动Tomcat服务器,在浏览器的地址栏中输入URL地址
http://localhost:8080/chapter04/HelloWorldServlet
访问HelloWorldServlet

Servlet的生命周期

Tomcat控制台,输出结果如下

Servlet的生命周期

可以看出,Tomcat控制台输出了init method is called和Hello World语句
说明,第一次访问HelloWorldServlet时,Tomcat创建了HelloWorldServlet对象,并且,调用service()方法处理用于请求,通过init()方法,实现了Servlet的初始化

刷新浏览器

多次访问HelloWorldServlet
Tomcat控制台输出结果如下

Servlet的生命周期

可以看出,控制只输出了HelloWorld语句
因此,init()方法只在第一次访问时执行
Service()方法,则在每次访问时都会被执行

销毁对象

将HelloWorldServlet移除,通过Tomcat管理平台
终止Web应用chapter04

Servlet的生命周期

此时,Servlet容器会调用destroy()方法
控制台输出了destroy method is called语句

Servlet的生命周期

相关标签: servlet