上一篇 文章中有提到,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 解析的更多相关文章

  1. JavaEE GenericServlet 解析

    从 上一篇 文章中可以看到,直接实现 Servlet 接口需要实现其所有方法,而这通常不是好的做法.相反,一种相对较好的做法是给出一个实现类来默认实现其所有方法或者部分方法,并开放给子类.而子类再在此 ...

  2. 解析Tomcat之HttpServlet详解

    解析Tomcat之HttpServlet详解 Servlet的框架是 由两个Java包组成:javax.servlet和javax.servlet.http. 在javax.servlet包中定义了所 ...

  3. HttpServlet详解

    http://www.cnblogs.com/panjun-Donet/archive/2010/02/22/1671290.html Servlet的框架是由两个Java包组成:javax.serv ...

  4. HTTP与HttpServlet

    (1).HTTP协议 Web浏览器和服务器通过HTTP协议在Internet上发送和接收消息.HTTP是一种基于请求/响应模式的协议.客户端发送一个请求,服务器端返回对该请求响应. . (2).HTT ...

  5. 【转】HttpServlet详解

    [转]HttpServlet详解 Servlet的框架是由两个Java包组成:javax.servlet和javax.servlet.http. 在javax.servlet包中定义了所有的Servl ...

  6. 关于HttpServlet和Servlet以及doPost和doGet关系

    这两天在看Servlet和Jsp,spring太难了,还是先看看基础,只怪自己太弱了. Servlet是一个接口,本身定义的是一种网络服务,HttpServlet是已经实现了Servlet接口,也就是 ...

  7. HttpServlet 详解(基础)

    HttpServlet详解 大家都知道Servlet,但是不一定很清楚servlet框架,这个框架是由两个Java包组成:javax.servlet和javax.servlet.http. 在java ...

  8. 【数据服务中间件】一、HttpServlet

    一.概念 Servlet的框架是由两个Java包组成:javax.servlet和javax.servlet.http GenericServlet和HttpServlet 3个方法代表了Servle ...

  9. servlet 之 HttpServlet抽象类详解

    Servlet的框架是由两个Java包组成:javax.servlet和javax.servlet.http. 在javax.servlet包中定义了所有的Servlet类都必须实现或扩展的的通用接口 ...

随机推荐

  1. freemarker之include指令(九)

    freemarker之include指令 1.父页面ftl <html> <head> <meta http-equiv="content-type" ...

  2. JAVA IDE IntelliJ IDEA 快捷键使用详记

    一.高效定位代码 1.项目之间的跳转 Ctrl + Alt + [  :切换到下一个项目窗口 Ctrl + Alt + ]  :  切换到上一个项目窗口 2.文件之间的跳转↑↓←→ Ctrl + E ...

  3. css3动画结束捕捉事件整理

    //捕捉webkitAnimationEnd事件 element.addEventListener('webkitAnimationEnd', end, false); //捕捉webkitTrans ...

  4. 消息中间件kafka+zookeeper集群部署、测试与应用

    业务系统中,通常会遇到这些场景:A系统向B系统主动推送一个处理请求:A系统向B系统发送一个业务处理请求,因为某些原因(断电.宕机..),B业务系统挂机了,A系统发起的请求处理失败:前端应用并发量过大, ...

  5. [BZOJ1385] [Baltic2000] Division expression (数学)

    Description 除法表达式有如下的形式: X1/X2/X3.../Xk 其中Xi是正整数且Xi<=1000000000(1<=i<=k,K<=10000) 除法表达式应 ...

  6. angular中$q.all用法

    $q.all是用于执行多个异步任务进行回调,它可以接受一个promise的数组,或是promise的hash(object).任何一个promise失败,都会导致整个任务的失败. 例1:接受一个pro ...

  7. Navicat for MySQL下载、安装与破解

    一:下载Navicat for MySQL 进入 Navicat for MySQL下载 ,根据需要选择下载的版本,我选择的是Windows 64bit,任意选择一个镜像地址下载. 二:安装Navic ...

  8. Java遍历二叉树深度宽度

    节点数据结构 class TreeNode { TreeNode left = null; TreeNode right = null; } 最大深度,基本思路是:使用递归,分别求出左子树的深度.右子 ...

  9. 创建和注册自定义 HTTP 模块

    本演练演示自定义 HTTP 模块的基本功能. 对于每个请求,都需要调用 HTTP 模块以响应 BeginRequest 和 EndRequest 事件. 因此,该模块在处理请求之前和之后运行. 如果 ...

  10. assert断言检测

    assert 是宏,非函数,包含在assert.h 头文件中. 如果其后面括号里的值为假,则程序终止运行,并提示出错.这个 宏只在 Debug 版本上起作用,而在 Release 版本被编译器完全优化 ...