深入剖析Tomcat筆記2
第二章 一個簡單的servlet容器
2.1 javax.servlet.Servlet介面
該介面是Servlet程式設計中最重要的,所有的servlet都必須實現該介面或繼承自實現該介面的類
5個方法
public void init(ServletConfig config) throws ServletException |
public void service(ServletRequest request, ServletResponse response) throws ServletException, java.io.IOException |
public void destroy() |
public ServletConfig getServletConfig() |
public java.lang.String getServletInfo() |
前三個方法是與servlet生命週期相關的方法。
init()方法進行初始化,servlet容器只會呼叫該方法一次,呼叫後則可以執行服務的方法。
service()方法,可能被呼叫多次
destroy()方法,一般當servlet容器關閉時或者servlet容器要釋放記憶體時,才會將servlet例項移除
package ecnu.cv.ex01; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.Servlet; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class PrimitiveServlet implementsView CodeServlet { public void init(ServletConfig config) throws ServletException { System.out.println("init"); } public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { System.out.println("service...."); PrintWriter writer = response.getWriter(); writer.println("Hello servlet"); } public void destroy() { System.out.println("destroy"); } public ServletConfig getServletConfig() { return null; } public String getServletInfo() { return null; } }
2.2 應用程式1
需求分析:
一個功能齊全的servlet容器有以下幾件事要做:
1. 當第一次呼叫某個servlet時,要載入該servlet,並呼叫其init()方法(僅僅呼叫一次)
2. 針對每個request請求,建立一個javax.servlet.ServletRequest例項和一個javax.servlet.ServletResponse例項
3. 呼叫該servlet的service方法,將servletRequest物件和servletResponse物件作為引數傳入;
4. 當關閉該servlet時,呼叫其destroy()方法,並解除安裝該servlet類
目標:
1. 實現HTTP請求
2. 建立一個servletRequest物件和一servletResponse物件
3. 若請求是一個靜態資源,則呼叫staticResourceProcessor物件的process()方法,傳入servletRequest物件和servletResponse物件
4. 若請求的是servlet,則載入相應的servlet類,呼叫其service方法,傳入servletRequest物件和servletResponse方法