一 生命週期
Servlet執行在Servlet容器(web伺服器)中,其生命週期由容器來管理,分為4個階段:
- 載入和例項化:預設情況下,當Servlet第一次被訪問時,由容器建立Servlet物件
@WebServlet(urlPatterns = "/demo1",loadOnStartup = 1)
loadOnstartup的取值有兩類情況
(1)負整數:第一次訪問時建立Servlet物件
(2)0或正整數:伺服器啟動時建立Servlet物件,數字越小優先順序越高 - 初始化:在Servlet例項化之後,容器將呼叫Servlet的init()方法初始化這個物件,完成一些如載入配置檔案、建立連線等初始化的工作。該方法只呼叫一次
- 請求處理:每次請求Servlet時,Servlet容器都會呼叫Servlet的service()方法對請求進行處理
- 服務終止:當需要釋放記憶體或者容器關閉時,容器就會呼叫Servlet例項的destroy()方法完成資源的釋放。在destroy()方法呼叫之後,容器會釋放這個Servlet例項,該例項隨後
會被Java的垃圾收集器所回收
點選檢視程式碼
package com.QixunQiu.web;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
/**
* Servlet生命週期方法
*/
@WebServlet(urlPatterns = "/demo2",loadOnStartup = 1)
public class ServletDemo2 implements Servlet {
/**
* 初始化方法
* 1.呼叫時機:預設情況下,Servlet被第一次訪問時,呼叫
* * loadOnStartup: 預設為-1,修改為0或者正整數,則會在伺服器啟動的時候,呼叫
* 2.呼叫次數: 1次
* @param config
* @throws ServletException
*/
public void init(ServletConfig config) throws ServletException {
System.out.println("init...");
}
/**
* 提供服務
* 1.呼叫時機:每一次Servlet被訪問時,呼叫
* 2.呼叫次數: 多次
* @param req
* @param res
* @throws ServletException
* @throws IOException
*/
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
System.out.println("servlet hello world~");
}
/**
* 銷燬方法
* 1.呼叫時機:記憶體釋放或者伺服器關閉的時候,Servlet物件會被銷燬,呼叫
* 2.呼叫次數: 1次
*/
public void destroy() {
System.out.println("destroy...");
}
public ServletConfig getServletConfig() {
return null;
}
public String getServletInfo() {
return null;
}
}
點選檢視程式碼
* 初始化方法,在Servlet被建立時執行,只執行一次
void init(ServletConfig config)
* 提供服務方法, 每次Servlet被訪問,都會呼叫該方法
void service(ServletRequest req, ServletResponse res)
* 銷燬方法,當Servlet被銷燬時,呼叫該方法。在記憶體釋放或伺服器關閉時銷燬Servlet
void destroy()
* 獲取Servlet資訊
String getServletInfo()
//該方法用來返回Servlet的相關資訊,沒有什麼太大的用處,一般我們返回一個空字串即可
public String getServletInfo() {
return "";
}
* 獲取ServletConfig物件
ServletConfig getServletConfig()
ServletConfig物件,在init方法的引數中有,而Tomcat Web伺服器在建立Servlet物件的時候會呼叫init方法,必定會傳入一個ServletConfig物件,我們只需要將伺服器傳過來的ServletConfig進行返回即可。
點選檢視程式碼
package com.QixunQiu.web;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
/**
* Servlet方法介紹
*/
@WebServlet(urlPatterns = "/demo3",loadOnStartup = 1)
public class ServletDemo3 implements Servlet {
private ServletConfig servletConfig;
/**
* 初始化方法
* 1.呼叫時機:預設情況下,Servlet被第一次訪問時,呼叫
* * loadOnStartup: 預設為-1,修改為0或者正整數,則會在伺服器啟動的時候,呼叫
* 2.呼叫次數: 1次
* @param config
* @throws ServletException
*/
public void init(ServletConfig config) throws ServletException {
this.servletConfig = config;
System.out.println("init...");
}
public ServletConfig getServletConfig() {
return servletConfig;
}
/**
* 提供服務
* 1.呼叫時機:每一次Servlet被訪問時,呼叫
* 2.呼叫次數: 多次
* @param req
* @param res
* @throws ServletException
* @throws IOException
*/
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
System.out.println("servlet hello world~");
}
/**
* 銷燬方法
* 1.呼叫時機:記憶體釋放或者伺服器關閉的時候,Servlet物件會被銷燬,呼叫
* 2.呼叫次數: 1次
*/
public void destroy() {
System.out.println("destroy...");
}
public String getServletInfo() {
return "";
}
}