該接口定義了以下5個方法
1. init()
2. service()
3. destroy()
4. setServletConfig()
5. getServletInfo()
也就意味着,若是咱們要經過實現Servlet接口來編寫Servlet類,須要實現Servlet接口中定義的5個方法,這樣編寫比較麻煩,因而有了GenericServlet抽象類。java
該類定義了一個通用的、不依賴於具體協議的Servlet,他實現了Servlet接口和ServletConfig接口。
因爲該類給出了除了service()
方法的其餘4個方法的簡單實現。因此,經過繼承GenericServlet來編寫Servlet類,只須要實現service()方法便可。服務器
大多數的網絡應用中,都是客戶端經過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容器使用ServletConfig對象在Servlet初始化期間向它傳遞配置信息,一個Servlet只有一個ServletConfig對象。
在ServletConfig接口中,只定義了4個方法:
1.getInitParameter()
2. getInitParameterNames()
3. getServletContext()
接口
4. getServletName()
資源
運行在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 中主要接口及實現類,包括: