码迷,mamicode.com
首页 > 编程语言 > 详细

JavaEE HttpServlet 解析

时间:2018-03-31 16:41:42      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:简单   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 解析

标签:简单   hub   spring   prot   generics   targe   info   let   protect   

原文地址:https://www.cnblogs.com/cyhbyw/p/8682632.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!