JavaEE GenericServlet 解析
从 上一篇 文章中可以看到,直接实现 Servlet 接口需要实现其所有方法,而这通常不是好的做法。相反,一种相对较好的做法是给出一个实现类来默认实现其所有方法或者部分方法,并开放给子类。而子类再在此默认实现类的基础上进行实现,或者根据需要重写这个默认类中的实现。而 GenericServlet 就是对 Servlet 的一个通用实现。
那 GenericServlet 是如何实现 Servlet 的呢?
01. 从下图的源码中可以看出, GenericServlet 的 destroy() 方法默认为空。

02. 它重载了 init(ServletConfig config) 方法并把 config 给成员变量;同时,调用了一个默认为空的 init() 方法!(非常重要)
GenericServlet 为什么要这样做呢?
大概原因是:
一、它把 config 赋值给成员变量,并通过 getServletConfig() 方法展现给子类,以方便子类使用。
二、空的 init() 方法可以开放给子类,让子类自由发挥。
所以,开发中通常的做法是重写 init() 方法而不是重写 init(ServletConfig config) 方法。

03. service() 方法被声明为抽象的,这样,其子类就只需要重写这个方法就能方便地实现 Servlet 了。

写了个简单的Demo来使用GenericServlet,地址:https://github.com/cyhbyw/JavaWEB_atguigu_TongGang
工程名称:cyhDebugSource_GenericServlet
现在,自定义实现的 Servlet 就变得更加简单了,如下图所示:

====================================================
后续内容:针对 Http 协议的 Servlet 实现类 HttpServlet
====================================================
JavaEE GenericServlet 解析的更多相关文章
- JavaEE HttpServlet 解析
上一篇 文章中有提到,GenericServlet 是对 Servlet 的一个通用实现,并提供了一个抽象的 service() 方法.而我们的互联网是使用 Http 协议来通信的,那针对这个&quo ...
- java EE设计模式简介
1.何为设计模式 设计模式提供了对常见应用设计问题的解决方案.在面向对象的编程中,设计模式通常在解决与对象创建和交互相关的问题,而非整体软件架构所面对的大规模问题,它们以样板代码的形式提供了通用的解决 ...
- JavaEE:XML解析
XML解析技术概述1.XML 技术主要企业应用1)存储和传输数据 2)作为框架的配置文件2.使用xml 存储和传输数据涉及到以下两点1)通过程序生成xml2)读取xml 中数据 ---- xml 解析 ...
- JavaEE实战——XML文档DOM、SAX、STAX解析方式详解
原 JavaEE实战--XML文档DOM.SAX.STAX解析方式详解 2016年06月22日 23:10:35 李春春_ 阅读数:3445 标签: DOMSAXSTAXJAXPXML Pull 更多 ...
- 传智168期JavaEE就业班 day05-XML 约束与解析
* 课程回顾: * DOM解析HTML简介 * DOM 文档对象模型 * 解析器 * document对象 * getElementById("id的值"); 返回一个元素(标签) ...
- javaEE学习笔记-利用DOM4J解析xml至数据库
xml代码文件名:test02.xml <ACCESOS> <item> <SOCIO> <NUMERO>00045050</NUMERO> ...
- JavaEE XML SAX解析
SAX解析XML @author ixenos SAX解析工具 SAX解析工具- Sun公司提供的.内置在jdk中.org.xml.sax.* 核心的API: SAXParser类: 用于读取和解析 ...
- JavaEE XML DOM解析之DOM4J
DOM解析之DOM4J @author ixenos DOM4J常用API 读取xml文档: Document doc = new SAXReader().read("xml文件" ...
- JavaEE XML DOM解析
DOM解析XML @author ixenos XML解析方式(原理) a) DOM 解析树 b) SAX 流事件 DOM解析对应主流工具 i. DOM(官方) i ...
随机推荐
- 关于html5 data-*自定义属性相关注意点和踩过的坑
在HTML5中添加了data-*的方式来自定义属性,所谓data-*实际上上就是data-前缀加上自定义的属性名,命名可以用驼峰命名方式,但取值是必需全部使用小写(后面会说),使用这样的结构可以进行数 ...
- 实例 find
2011/09/08 12:00 时间开始找一天內的,会列出 2011/09/07 12:00 ~ 2011/09/08 12:00 时间內的文件3天前被改动过的文件 (前第三天以前 → 2011/0 ...
- 【BZOJ2004】公交线路(动态规划,状态压缩,矩阵快速幂)
[BZOJ2004]公交线路(动态规划,状态压缩,矩阵快速幂) 题面 BZOJ 题解 看到\(k,p\)这么小 不难想到状态压缩 看到\(n\)这么大,不难想到矩阵快速幂 那么,我们来考虑朴素的\(d ...
- 【Luogu1273】有线电视网(动态规划)
[Luogu1273]有线电视网(动态规划) 题面 题目描述 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端, ...
- LightOJ1282 Leading and Trailing
题面 给定两个数n,k 求n^k的前三位和最后三位 Input Input starts with an integer T (≤ 1000), denoting the number of test ...
- Spring入门看这一篇就够了
前言 前面已经学习了Struts2和Hibernate框架了.接下来学习的是Spring框架...本博文主要是引入Spring框架... Spring介绍 Spring诞生: 创建Spring的目的就 ...
- JavaScript实现强制重定向至HTTPS页面
<script type="text/javascript"> var targetProtocol = "https:"; if (window. ...
- 关于Web Audio API的入门
Web Audio API提供了一个简单强大的机制来实现控制web应用程序的音频内容.它允许你开发复杂的混音,音效,平移以及更多. 可以先看一下MDN的这篇文章<Web Audio API的运用 ...
- Lintcode249 Count of Smaller Number before itself solution 题解
[题目描述] Give you an integer array (index from 0 to n-1, where n is the size of this array, data value ...
- C#多线程编程(7)--锁
一提到线程同步,就会提到锁,作为线程同步的手段之一,锁总是饱受质疑.一方面锁的使用很简单,只要在代码不想被重入的地方(多个线程同时执行的地方)加上锁,就可以保证无论何时,该段代码最多有一个线程在执行: ...