Httpservlet源碼及實現機制詳解


Httpservlet源碼及實現機制

HTTP請求剛剛進來的時候實際上只是一個HTTP請求報文,容器會自動將這個HTTP請求報文包裝成一個HttpServletRequest對象,並且自動調用HttpServlet的service()方法來解析這個HTTP請求,service()方法會解析HTTP請求行,而HTTP請求行由method,uri,HTTP version三個組成,method就是get或者post,service()方法根據method來決定是執行doGet還是doPost,這一切都是服務器Tomcat/weblogic/websphere/jboss(容器)自動完成的,HTTP的格式也自動被解析。 

只要你的類繼承了HttpServlet,並且在web.xml里面配置了相應的servlet和mapping,服務器就會自動幫你執行以上過程。

          在每一個Servlet都必須要實現Servlet接口,GenericServlet是個通用的、不特定於任何協議的Servlet,它實現了Servlet接口,而HttpServlet繼承於GenericServlet,因此HttpServlet也實現了Servlet接口,所以我們定義的Servlet只需要繼承HttpServlet父類即可。

 Servlet接口中定義了一個service方法,HttpServlet對該方法進行了實現,實現方式就是將ServletRequest與ServletResponse轉換為HttpServletRequest與HttpServletResponse。

 

轉換完畢后,會調用HttpServlet類中自己定義的service方法,如下所示

在該service方法中,首先獲得到請求的方法名,然后根據方法名調用對應的doXXX方法,比如說請求方法為GET,那么就去調用doGet方法;請求方法為POST,那么就去調用doPost方法。

在HttpServlet類中所提供的doGet、doPost等方法都是直接返回錯誤信息,所以我們需要在自己定義的Servlet類中override這些方法

 

 

Servlet的框架是由兩個Java包組成:javax.servlet和javax.servlet.http. 在javax.servlet包中定義了所有的Servlet類都必須實現或擴展的的通用接口和類.在javax.servlet.http包中定義了采用HTTP通信協議的HttpServlet類.

  Servlet的框架的核心是javax.servlet.Servlet接口,所有的Servlet都必須實現這一接口 .在Servlet接口中定義了5個方法,其中有3個方法代表了Servlet的生命周期:

  init方法,負責初始化Servlet對象

  service方法,負責相應客戶的請求

  destory方法,當Servlet對象退出聲明周期時,負責釋放占有的資源

  當Web容器接收到某個Servlet請求時,Servlet把請求封裝成一個HttpServletRequest對象,然后把對象傳給Servlet的對應的服務方法.

  HTTP的請求方式包括DELETE,GET,OPTIONS,POST,PUT和TRACE,在HttpServlet類中分別提供了相應的服務方法, 它們是,doDelete(),doGet(),doOptions(),doPost(), doPut()和doTrace().

  HttpServlet的功能

  HttpServlet首先必須讀取Http請求的內容。Servlet容器負責創建HttpServlet對象,並把 Http請求直接封裝到HttpServlet對象中,大大簡化了HttpServlet解析請求數據的工作量。HttpServlet容器響應Web客戶請求流程如下:

  1)Web客戶向Servlet容器發出Http請求;

  2)Servlet容器解析Web客戶的Http請求;

  3)Servlet容器創建一個HttpRequest對象,在這個對象中封裝Http請求信息;

  4)Servlet容器創建一個HttpResponse對象;

  5)Servlet容器調用HttpServlet的service方法,把HttpRequest和HttpResponse對象作為service方法的參數傳給HttpServlet對象;

  6)HttpServlet調用HttpRequest的有關方法,獲取HTTP請求信息;

  7)HttpServlet調用HttpResponse的有關方法,生成響應數據;

  8)Servlet容器把HttpServlet的響應結果傳給Web客戶。

  二、創建HttpServlet的步驟——“四部曲”

  1)擴展HttpServlet抽象類;

  2)覆蓋HttpServlet的部分方法,如覆蓋doGet()或doPost()方法;

  3)獲取HTTP請求信息。通過HttpServletRequest對象來檢索HTML表單所提交的數據或URL上的查詢字符串;

  4)生成HTTP響應結果。通過HttpServletResponse對象生成響應結果,它有一個getWriter()方法,該方法返回一個PrintWriter對象。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM