GenericServlet,HttpServletRequest和HttpServletResponse

來源:互聯網
上載者:User

標籤:

最基本的是通過實現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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.