所有 Servlet 必須實作 javax.servlet.Servlet 介面,五大生命週期方法:
public void init(ServletConfig config) throws ServletException
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException
public void destroy()
public ServletConfig getServletConfig()
public String getServletInfo()
init():實例化後僅呼叫一次,載入驅動、初始化資源。service():每請求呼叫一次,核心處理邏輯入口。destroy():卸載前呼叫,釋放連線、執行緒、檔案控制代碼。public class PrimitiveServlet implements Servlet {
public void init(ServletConfig config) { System.out.println("init"); }
public void service(ServletRequest req, ServletResponse res) throws IOException {
System.out.println("from service");
PrintWriter out = res.getWriter();
out.println("Hello. Roses are red.");
out.print("Violets are blue.");
}
public void destroy() { System.out.println("destroy"); }
public String getServletInfo() { return null; }
public ServletConfig getServletConfig() { return null; }
}
init()、分派請求至 service()、關閉時呼叫 destroy()。ServletRequest/ServletResponse 封裝 HTTP 協定細節。生產級容器額外支援:連線池、執行緒池、熱部署、安全域、JNDI、JMX 監控、叢集 Session 複製等。本文以極簡容器示範核心流程,複雜實作請參考 Tomcat 原始碼。