Servlet的生命周期
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文件
将编译后生成的class文件,复制到chapter04的WEB-INF\classes目录
启动Tomcat服务器,在浏览器的地址栏中输入URL地址
http://localhost:8080/chapter04/HelloWorldServlet
访问HelloWorldServlet
Tomcat控制台,输出结果如下
可以看出,Tomcat控制台输出了init method is called和Hello World语句
说明,第一次访问HelloWorldServlet时,Tomcat创建了HelloWorldServlet对象,并且,调用service()方法处理用于请求,通过init()方法,实现了Servlet的初始化
刷新浏览器
多次访问HelloWorldServlet
Tomcat控制台输出结果如下
可以看出,控制只输出了HelloWorld语句
因此,init()方法只在第一次访问时执行
Service()方法,则在每次访问时都会被执行
销毁对象
将HelloWorldServlet移除,通过Tomcat管理平台
终止Web应用chapter04
此时,Servlet容器会调用destroy()方法
控制台输出了destroy method is called语句
推荐阅读
-
Ai怎么绘制圆形参考线 Ai创建圆形参考线的教程
-
ps怎么制作渐变融合效果的海报? ps渐变海报的做法
-
总结C#处理异常的方式
-
华为nova8和华为nova8Plus的区别哪个更值得入手
-
检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005 拒绝访问
-
超实用的在线作图工具,效率提升100%!
-
html5:足以改变我们未来生活的十项提示
-
Oracle 对表中的记录进行大批量删除
-
java中Memcached的使用实例(包括与Spring整合)
-
package.json与package-clock.json的区别