通常狀況下,自定義Servlet都是繼承HttpServlet。但經過HttpServlet的繼承鏈,咱們知道HttpServlet是實現了Servlet接口,下面列表是Servlet接口提供的全部方法。java
Method Summary | |
---|---|
void | destroy() |
ServletConfig | getServletConfig() |
String | getServletInfo() |
void | init(ServletConfig config) |
void | service(ServletRequest req, ServletResponse res) |
上述全部方法中,init()、service()和destroy()方法叫作Servlet的生命週期。下面咱們分別討論一下有關生命週期的三個方法:web
下面咱們經過實際操做來討論關於Servlet的生命週期是怎麼樣的:apache
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;
}
}
<?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>
九月 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發送請求時,Tomcat服務器的Servlet容器首先建立Servlet實例對象,再進行Servlet初始化工做,最後調用service()方法來處理請求。第二次向Servlet發送請求時,只調用了service()方法,並無執行Servlet的構造方法和init()方法。在中止Tomcat服務器時,Servlet的destroy()方法被調用,釋放所使用的資源。瀏覽器
轉載說明:請註明做者及原文連接,謝謝!tomcat