从 上一篇 文章中可以看到,直接实现 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

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

最新文章

  1. 【python之路3】if 语句
  2. Python笔记(4)类__属性与描述符
  3. python 面试必读
  4. Java 内部类摘抄
  5. js的querySelector跟querySelectorAll
  6. python之优雅处理套接字错误
  7. C++ 关键字 explicit, export, mutable
  8. SQL-字符串合并
  9. ZOJ 1076 Gene Assembly
  10. android测试常用的命令介绍
  11. C#中常用修饰符
  12. Intel 的面试经历中国研究院
  13. 2.3.2 InnoDB内存
  14. 访问System x3650 IMM2的几种方式
  15. 先进过程控制之一:浅说APC
  16. 2.Magicodes.NET框架之路——策略管理
  17. logstash采集与清洗数据到elasticsearch案例实战
  18. Docker-02 无人值守安装 docker
  19. jQuery发布1.9正式版,最后支持IE 6/7/8
  20. 【 转】__try,__except,__finally,__leave异常模型机制

热门文章

  1. java.lang.Exception: Socket bind failed
  2. .Net学习计划
  3. 掌握这些知识,你的python水平能更上一层楼
  4. 8Manage:物流CRM,深度挖掘快递企业下一站蓝海!
  5. SpringBoot初探之Swagger配置
  6. secureCRT的安装及破解
  7. ServiceFabric极简文档-0. ServiceFabric简介
  8. Java设计模式(六)Adapter适配器模式
  9. Unity3d底层数据传递分析
  10. 我的linux一万小时