JavaEE HttpServlet 解析

來源:互聯網
上載者:User

標籤:簡單   hub   spring   prot   generics   targe   info   let   protect   

上一篇 文章中有提到,GenericServlet 是對 Servlet 的一個通用實現,並提供了一個抽象的 service() 方法。而我們的互連網是使用 Http 協議來通訊的,那針對這個“特殊的” Http 協議,有沒有與之對應的 Servlet 實現呢?

有的,它就是 HttpServlet,並且,它直接繼承自 GenericServlet,如所示。

同時,從上面的圖片中可以看到,HttpServlet 預設支援的 7 個 Http 方法:Delete、Head、Get、Options、Post、Put、Trace。

 

簡單Demo代碼地址:https://github.com/cyhbyw/JavaWEB_atguigu_TongGang

工程名稱: cyhDebugSource_HttpServlet

 

HttpServlet 又是如何通過繼承 GenericServlet 並實現對 Http 協議的支援呢?

從中容易看出,它在重寫的 service() 方法中直接將 ServletRequest & ServletResponse 轉為 HttpServletRequest & HttpServletResponse,並調用重載的 service() 方法。

而這個重載的 service() 方法實現如下。注意,方法入參與上一個重寫的 service() 方法的不一樣!

同時,它從 HttpServletRequest 中擷取到請求方式並調用對應的 doGet(), doPost(), doPut() 等方法。

以 doPost() 為例,其實現如下;可以看到,存取層級為 protected 並且預設實現是直接返回錯誤,所以,這是一個開放給子類去繼承並實現的方法。

  如果子類沒有實現對應的方法,則請求結果如所示。

相反,要實現對 get, put, post 等 Http 請求方式的不同處理,就變得非常簡單了,如所示

直接實現對應的 goGet(), doPost(), doPut() 等方法就可以了,並且,入參是 HttpServletRequest & HttpServletResponse,這可以很方便地處理 Http 相關的內容。

 

====================================================

後續內容:SpringMVC 中的 DispatcherServlet 是如何工作的?

====================================================

JavaEE HttpServlet 解析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.