Servlet 接口

Servlet接口

該接口定義了以下5個方法 
1. init()
2. service()
3. destroy() 
4. setServletConfig()
5. getServletInfo()
也就意味着,若是咱們要經過實現Servlet接口來編寫Servlet類,須要實現Servlet接口中定義的5個方法,這樣編寫比較麻煩,因而有了GenericServlet抽象類。java

GenericServlet抽象類

該類定義了一個通用的、不依賴於具體協議的Servlet,他實現了Servlet接口和ServletConfig接口。 
因爲該類給出了除了service()方法的其餘4個方法的簡單實現。因此,經過繼承GenericServlet來編寫Servlet類,只須要實現service()方法便可。服務器

HttpServlet抽象類

大多數的網絡應用中,都是客戶端經過HTTP協議去訪問服務器端的資源,而咱們所編寫的Servlet也主要用於HTTP協議的請求和響應。爲了快速開發應用於HTTP協議的Servlet類,Sun公司在javax.servlet.http包中給咱們提供了一個抽象的類HttpServlet,它繼承自GenericServlet類,用於建立適合Web站點的HTTP Servlet。網絡

另外,針對HTTP1.1中定義的7種請求方法GET,POST,HEAD,PUT,DELETE,TRACE,OPTIONS,HttpServlet分別提供了7個處理方法: 
doGet()doPost()doHead()doPut()doDelete()doTrace()doOptions() 
當容器接收到一個針對HttpServlet對象的請求時,調用該對象中的方法的順序以下: 
1. 調用公共(public) service()方法。 
2. 在公共的 service() 方法中,首先將參數類型轉換爲HttpServletRequest和HttpServletResponse,而後調用保護的(protected) service()方法,將轉換後的HttpServletRequest對象和HttpServletResponse對象做爲參數傳遞進去。 
3. 在保護的service()方法中,首先調用HttpServletRequest對象的getMethod()方法,獲取HTTP請求方法的名字,而後跟去請求方法的類型,調用相應的doXxx()方法。spa

所以咱們在編寫HttpServlet派生類的時候,通常不須要去覆蓋service()方法,而只須要重寫相應的doXxx()方法便可。日誌

HttpServlet對這7種方法的實現: 
1. TRACE和OPTIONS作了適當實現,不須要去覆蓋。 
2. 其餘5個提供的實現都是返回HTTP錯誤。code

與請求和響應相關的接口

Servlet由Servlet容器管理,當用戶請求到來時,容器建立一個ServletRequest對象,封裝請求數據,同時建立一個ServletResponse對象,封裝響應數據。這兩個對象被容器做爲service()方法的參數傳遞給Servlet,Servlet利用ServletRequest對象獲取客戶端發送來的請求數據,利用ServletResponse對象發送響應數據。對象

對於HttpServletRequest對象和HttpServletResponse對象分別繼承與ServletRequest對象和ServletResponse對象,而且在原有方法基礎上新增一些方法。但都是用做封裝請求數據和響應數據。繼承

與Servlet配置相關的接口

Servlet容器使用ServletConfig對象在Servlet初始化期間向它傳遞配置信息,一個Servlet只有一個ServletConfig對象。 
在ServletConfig接口中,只定義了4個方法: 
1.getInitParameter() 
2. getInitParameterNames() 
3. getServletContext() 接口

4. getServletName() 資源

Servlet上下文

運行在Java虛擬機中的每個Web應用程序都有一個與之相關的Servlet上下文。Java Servlet API提供了一個ServletContext接口用來表示上下文。在這個接口中定義了一組方法,Servlet可使用這些方法與它的Servlet容器進行通訊。例如,獲得文件的MIME類型,轉發請求,或者向日志文件中寫入日誌信息。 
Servlet容器在Web應用程序加載時建立ServletContext對象,做爲Web應用程序的運行時表示,ServletContext對象能夠被應用程序中全部的Servlet所訪問。

獲得ServletContext對象的方法: 
1. 經過ServletConfig對象的getServletContext()方法獲得。 
2. GenericServlet類的getServletContext()方法獲得(其實質也是調用ServletConfig對象的getServletContext()方法獲得的)。

請求轉發

實現請求轉發是經過RequestDispatcher接口實現的 
獲得RequestDispatcher對象的方法: 
1. 利用ServletRequest接口中的RequestDispatcher()方法 
2. 利用ServletContext接口中的getNamedDispatcher()方法 
3. 利用ServletContext接口中的getRequestDispatcher()方法 
請求轉發的兩種方法: 
1. forward() 
2. include() 
二者區別在於,利用include()方法將請求轉發給其餘的Servlet,被調用的Servlet對該請求做出的響應將併入原先的響應對象中,原先的Servlet還能夠繼續輸出響應信息。而利用forward()方法將請求轉發給其餘的Servlet,將由被調用的Servlet負責對請求做出響應,而原先Servlet的執行則終止。

另外還能夠經過HttpServletResponse接口的sendRedirect()方法利用另外的資源來爲客戶端進行服務。

sendRedirect()不但能夠在位於同一個主機上的不一樣Web應用程序之間進行重定向,並且能夠將客戶端重定向到其餘服務器上的Web應用程序資源。 

 

總結

Servlet API 中主要接口及實現類,包括:

    • 與Servlet實現相關的Servlet接口 
      1. Servlet接口
      2. GenericServlet抽象類
      3. HttpServlet抽象類
    • 與請求和響應相關的接口 
      1. ServletRequest接口
      2. ServletResponse接口
      3. HttpServletResquest接口
      4. HttpServletResponse接口
    • 與Servlet配置相關的接口 
      1. ServletConfig接口
    • Servlet上下文 
      1. ServletContext接口
    • 請求轉發 
      1. RequestDispatcher接口
相關文章
相關標籤/搜索