一般情况下,自定义Servlet都是继承HttpServlet。但通过HttpServlet的继承链,我们知道HttpServlet是实现了Servlet接口,下面列表是Servlet接口提供的所有方法。
Method Summary
void |
destroy() |
ServletConfig |
getServletConfig() |
String |
getServletInfo() |
void |
init(ServletConfig config) |
void |
service(ServletRequest req, ServletResponse res) |
上述所有方法中,init()、service()和destroy()方法叫做Servlet的生命周期。下面我们分别讨论一下有关生命周期的三个方法:
- init()方法
- 在Servlet实例化之后,Servlet容器会调用init()方法,主要是用来完成处理客户端请求之前的初始化工作。
- init()方法在Servlet的生命周期中只被执行一次。
- service()方法
- Servlet容器调用service()方法来处理客户端发送的请求。在service()方法被调用之前,必须保证init()方法被正确执行。
- service()方法在每次客户端发送请求之后,会被执行一次。
- destroy()方法
- 当Servlet容器检测到当前Servlet实例被移除时,会调用destroy()方法,以便让Servlet实例可以释放所使用的所有资源。
- destroy()方法在Servlet的生命周期中也只被执行一次。
下面我们通过实际操作来讨论关于Servlet的生命周期是怎么样的:
public class LifeServlet implements Servlet {
public LifeServlet(){
System.out.println("这里创建了一个Servlet实例对象...");
}
public void init(ServletConfig config) throws ServletException {
System.out.println("这是init()方法...");
}
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
System.out.println("这是service()方法...");
}
public void destroy() {
System.out.println("这是destroy()方法...");
}
public ServletConfig getServletConfig() {
return null;
}
public String getServletInfo() {
return null;
}
}
- 在web.xml文件中,配置有关Servlet信息。
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>LifeServlet</servlet-name>
<servlet-class>app.java.servlet.LifeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LifeServlet</servlet-name>
<url-pattern>/servlet/LifeServlet</url-pattern>
</servlet-mapping>
</web-app>
- 将Web应用程序发布到Tomcat服务器,并启动Tomcat服务器。
- 启动Tomcat服务器之后,我们可以查看Tomcat服务器启动的日志内容,并没有有关Servlet信息。
九月 12, 2014 8:00:41 下午 org.apache.catalina.core.AprLifecycleListener init
INFO: Loaded APR based Apache Tomcat Native library 1.1.31 using APR version 1.4.8.
九月 12, 2014 8:00:41 下午 org.apache.catalina.core.AprLifecycleListener init
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
九月 12, 2014 8:00:42 下午 org.apache.catalina.core.AprLifecycleListener initializeSSL
INFO: OpenSSL successfully initialized (OpenSSL 1.0.1h 5 Jun 2014)
九月 12, 2014 8:00:42 下午 org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-apr-8080"]
九月 12, 2014 8:00:42 下午 org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-apr-8009"]
九月 12, 2014 8:00:42 下午 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 1417 ms
九月 12, 2014 8:00:42 下午 org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
九月 12, 2014 8:00:42 下午 org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.55
九月 12, 2014 8:00:43 下午 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory C:\Tools\apache-tomcat-7.0.55\webapps\08_servlet
九月 12, 2014 8:00:43 下午 org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deployment of web application directory C:\Tools\apache-tomcat-7.0.55\webapps\08_servlet has finished in 377 ms
九月 12, 2014 8:00:44 下午 org.apache.catalina.startup.Catalina start
INFO: Server startup in 1766 ms
- 重新刷新页面,再次发送请求,调用Servlet内容。
通过上述操作,我们可以发现:在第一次向Servlet发送请求时,Tomcat服务器的Servlet容器首先创建Servlet实例对象,再进行Servlet初始化工作,最后调用service()方法来处理请求。第二次向Servlet发送请求时,只调用了service()方法,并没有执行Servlet的构造方法和init()方法。在停止Tomcat服务器时,Servlet的destroy()方法被调用,释放所使用的资源。
转载说明:请注明作者及原文链接,谢谢!
<script type="text/javascript">
$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('<ul/>').addClass('pre-numbering').hide();
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i <= lines; i++) {
$numbering.append($('<li/>').text(i));
};
$numbering.fadeIn(1700);
});
});
</script>
分享到:
相关推荐
SERVLET生命周期与JSP生命周期比较
servlet生命周期详解
servlet生命周期演示,便于理解servlet工作流程。
JavaEE第1课Servlet入门、生命周期.pptx
山寨qq项目1.登录界面教你学会制作qq登录及后台运行。
servlet的生命周期及工作原理 内容很简明扼要,我很喜欢。提纲挈领的阐述了servlet的生命周期及工作原理,很容易理解,欢迎广大读者阅读!非常适合初学者!呵呵!
Servlet运行在Servlet容器中,其生命周期由容器来管理。Servlet的生命周期通过javax.servlet.Servlet接口中的init()、service()和destroy()方法来表示。
从三个阶段来描述servlet的生命周期:初始化阶段、运行阶段和销毁阶段。
Servlet生命周期就是servlet从创建到销毁的过程,包括加载和实例化,初始化,服务,和销毁4步。 当客户第一次请求时,首先判断是否存在servlet对象,第一次请求时不存在,则由tomcat创建对象,调用init()方法对...
servlet生命周期和模版设计模式,包括代码以及相关文档
servlet生命周期详细图解,矢量图。 详细的解释请参考本人博客:http://blog.csdn.net/dwyers/article/details/38435949
Java Servlet的原理与生命周期 CGI的工作过程
servlet的执行过程与生命周期心得体会
servlet的架构与生命周期 博文链接:https://shangdiyefankun.iteye.com/blog/126204
Servlet生命周期,web开发必须掌握到知识点,其中生命周期也是需要掌握的
关于对Servlet声明周期的图例示意!
达内学习笔记,servlet生命周期,十分详细,保证一看就懂
本人学习Servlet的笔记。可以很好区别jsp与Servlet之间的区别