当前位置: 首页 > news >正文

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

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

转载于:https://www.cnblogs.com/cyhbyw/p/8682307.html

相关文章:

  • 算法系列15天速成——第十四天 图【上】
  • ionic3 关于屏幕方向问题
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • Confluence 6 更新目录
  • Quartz 表达式生成器
  • MongoDb进阶实践之五 MongoDB修改命令详述
  • [2]十道算法题【Java实现】
  • SSH密钥分发
  • Angular数据绑定机制
  • Java 中的E,K,V,T,U,S
  • 订阅Forge Viewer所有的事件
  • 使用正则表达式,取得点击次数,函数抽离
  • 记一次和乔布斯合作最难忘的经历
  • 第9章WEB09-Servlet篇
  • servlet匹配路径时/和/*的区别(转)
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • 345-反转字符串中的元音字母
  • Apache的基本使用
  • CSS盒模型深入
  • ES10 特性的完整指南
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • java8-模拟hadoop
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • learning koa2.x
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • Python中eval与exec的使用及区别
  • Spark RDD学习: aggregate函数
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 高性能JavaScript阅读简记(三)
  • 机器学习学习笔记一
  • 近期前端发展计划
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 嵌入式文件系统
  • 如何解决微信端直接跳WAP端
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 一个SAP顾问在美国的这些年
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​香农与信息论三大定律
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • $(selector).each()和$.each()的区别
  • (2)Java 简介
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (附源码)计算机毕业设计高校学生选课系统
  • (九)One-Wire总线-DS18B20
  • (转) Android中ViewStub组件使用
  • (转)创业的注意事项
  • (转)可以带来幸福的一本书
  • (转)重识new
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?