標籤:
最基本的是通過實現Servlet介面來編寫Servlet類,這需要實現Servlet介面中定義的5個方法。
為了簡化Servlet的編寫,在javax.servlet包中提供了一個抽象類別GenericServlet,它給出了除了service( )方法外的其他4個方法的簡單實現。
如果要編寫一個通用的Servlet,只需要從GenericServlet類繼承,並實現其中的抽象方法service( )。
在GenericServlet類中,定義了兩個重載的init( )方法:
public void init(ServletConfig config) throws ServletException
public void init( ) throws ServletException
第一個init( )方法是Servlet介面中init( )方法的實現。在這個方法中,首先將ServletConfig對象儲存在一個transient執行個體變數中,然後調用第二個不帶參數的init( )方法。
通常在編寫繼承自GenericServlet的Servlet類時,只需要重寫第二個不帶參數的init( )方法即可。
如果覆蓋了第一個init( )方法,那麼應該在子類的方法中,包含一句super.init(config)代碼的調用。
大多數的網路應用中都是通過HTTP協議去訪問伺服器端的資源,編寫的Servlet也主要是應用於HTTP協議的請求和響應。
為了快速開發,直接在javax.servlet.http包中提供了一個抽象類別HttpServlet,它繼承自GenericServlet類。
public abstract class HttpServlet extends GenericServlet implements java.io.Serializable
在HttpServlet中提供了兩個重載的service( )方法:
public void service(ServletRequest req, ServletResponse res) throws ServletException, java.io.IOException
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException
第一個service( )方法是GenericServlet類中service( )方法的實現。在這個方法中,首先就愛那個req和res對象轉換為HttpServletRequest(繼承自ServletRequest介面)和HttpServletResponse(繼承自ServletResponse介面)類型,然後調用第二個service方法,對客戶請求進行處理。
針對HTTP1.1中定義的7中要求方法GET,POST,HEAD,PUT,DELETE,TRACE和OPTIONS,HttpServlet分別提供了7個處理方法:
protected void doGet(HttpServeletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException
protected void doPost(HttpServeletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException
protected void doHead(HttpServeletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException
protected void doPut(HttpServeletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException
protected void doDelete(HttpServeletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException
protected void doTrace(HttpServeletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException
protected void doOptions(HttpServeletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException
這7個方法的參數類型及異常拋出類型與HttpServlet類中的第二個重載的service( )方法是一致的。當容器收到一個針對HttpServlet對象的請求時,調用該對象中的方法順序如下:
1、調用公用的(public)service( )方法。
2、在公用的service( )方法中,首先將參數類型轉換為HttpServletRequest和HttpServletResponse,然後調用保護的(protected)service( )方法,將轉換後的HttpServletRequest對象和HttpServletResponse對象作為參數傳遞進去。
3、在保護的service( )方法中,首先調用HttpServletRequest對象的getMethod( )方法,擷取HTTP要求方法的名字,分然後根據要求方法的類型,調用相應的doXxx( )方法。
因此通常在編寫HttpServlet的衍生類別時,不需要去覆蓋service( )方法,而只需要重寫相應的doXxx( )方法。
HttpServlet雖然是抽象類別,但是在這個類中沒有抽象的方法,其中所有的方法都已經實現。只是在這個類中如何對客戶請求進行處理的方法,沒有真正地實現,淡然也不可能真正地實現,因為對客戶請求如何進行處理,需要根據實際的應用來決定。根據應用的需要重寫其中的請求處理方法即可。
HttpServletRequest和HttpServletResponse
HttpServletRequest和HttpServletResponse這兩個介面分別繼承自javax.servlet.ServletRequest和javax.servlet.ServletResponse介面。
這兩個介面中也有很多的方法,這裡就不一一細講了。
GenericServlet,HttpServletRequest和HttpServletResponse