標籤:簡單 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 解析