阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

GenericServlet介绍

371次阅读
没有评论

共计 3042 个字符,预计需要花费 8 分钟才能阅读完成。

一、GenericServlet 概述

GenericServlet 是 Servlet 接口的实现类,我们可以通过继承 GenericServlet 来编写自己的 Servlet。

GenericServlet 介绍

自己定义的增强 Servlet 实现类

public class BServlet implements Servlet {private ServletConfig config; /* * 需要就写,不需要就不写 */ @Override public void destroy() {System.out.println("啊~ 我要死了!"); } /* * 请放心,这个方法一定会在 init() 方法之后被调用!* init() 被调用后,本类的成员 this.config 已经有值了!*/ @Override public ServletConfig getServletConfig() {return this.config; } /* * 没有用的东西,爱实现不实现 */ @Override public String getServletInfo() {return "我是一个快乐的 Servlet"; } /* * 由 Tomcat 来调用,并且只调用一次 * 它是这些方法中第一个被调用的,它会在构造器之后马上被调用!*/ @Override public void init(ServletConfig config) throws ServletException {// 把 tomcat 传递的 Servletconfig 赋值给本类的一个成员,其实就是把它保存起来,方便在其他方法中使用! this.config = config; init();} /* * 这个方法是本类自己定义的!不是 Servlet 接口中的方法 */ public void init() { } @Override public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {/* * 这里是否可以使用 ServletConfig 的成员呢?*/ System.out.println("每次处理请求都会被调用!"); } public ServletContext getServletContext() {return config.getServletContext();} public String getServletName() {return config.getServletName();} public String getInitParameter(String name) {return config.getInitParameter(name); } }

下面是 GenericServlet 类的源代码:

GenericServlet.java

public abstract class GenericServlet implements Servlet, ServletConfig, java.io.Serializable {private static final long serialVersionUID = 1L; private transient ServletConfig config; public GenericServlet() {} @Override public void destroy() {} @Override public String getInitParameter(String name) {return getServletConfig().getInitParameter(name); } @Override public Enumeration<String> getInitParameterNames() {return getServletConfig().getInitParameterNames(); } @Override public ServletConfig getServletConfig() {return config; } @Override public ServletContext getServletContext() {return getServletConfig().getServletContext(); } @Override public String getServletInfo() {return ""; } /* 实现了 Servlet 的 init(ServletConfig) 方法,把参数 config 赋给了本类的成员 config,然后再调用本类自己的无参的 init() 方法。*/ @Override public void init (ServletConfig config) throws ServletException {this.config = config; this.init();} /* 这个方法是 GenericServlet 自己的方法,而不是从 Servlet 继承下来的。当我们自定义 Servlet 时,如果想完成初始化作用就不要再重复 init(ServletConfig) 方法了,而是应 该去重写 init() 方法。因为在 GenericServlet 中的 init(ServletConfig) 方法中保存 了 ServletConfig 对象,如果覆盖了保存 ServletConfig 的代码,那么就不能再使用 ServletConfig 了。*/ public void init () throws ServletException {} public void log(String msg) {getServletContext().log(getServletName() + ":" + msg); } public void log(String message, Throwable t) {getServletContext().log(getServletName() + ":" + message, t); } @Override public abstract void service(ServletRequest req, ServletResponse res) throws ServletException, IOException; @Override public String getServletName() {return config.getServletName();} }

二 GenericServlet 的 init() 方法

在 GenericServlet 中,定义了一个 ServletConfig config 实例变量,并在 init(ServletConfig) 方法中把参数 ServletConfig 赋给了实例变量。然后在该类的很多方法中使用了实例变量 config。

如果子类覆盖了 GenericServlet 的 init(StringConfig) 方法,那么 this.config=config 这一条语句就会被覆盖了,也就是说 GenericServlet 的实例变量 config 的值为 null,那么所有依赖 config 的方法都不能使用了。如果真的希望完成一些初始化操作,那么去覆盖 GenericServlet 提供的 init() 方法,它是没有参数的 init() 方法,它会在 init(ServletConfig) 方法中被调用。

三、实现了 ServletConfig 接口

GenericServlet 还实现了 ServletConfig 接口,所以可以直接调用 getInitParameter()、getServletContext() 等 ServletConfig 的方法。

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-06-06发表,共计3042字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7986048
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
【1024程序员】我劝你赶紧去免费领一个AWS、华为云等的主机

【1024程序员】我劝你赶紧去免费领一个AWS、华为云等的主机

【1024 程序员】我劝你赶紧去免费领一个 AWS、华为云等的主机 每年 10 月 24 日,程序员们都会迎来...
150元打造低成本NAS小钢炮,捡一块3865U工控板

150元打造低成本NAS小钢炮,捡一块3865U工控板

150 元打造低成本 NAS 小钢炮,捡一块 3865U 工控板 一块二手的熊猫 B3 工控板 3865U,搭...
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛 NAS-8:有了 NAS 你可以干什么?软件汇总篇 前言 哈喽各位玩友!我是是星哥,不少朋友私...
颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

  颠覆 AI 开发效率!开源工具一站式管控 30+ 大模型 ApiKey,秘钥付费 + 负载均衡全...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...
零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...
星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛 NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手! 作为动漫爱好者,你是否还在为...
让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级 大家好,我是星哥,之前写了一篇文章 自己手撸一...
如何安装2026年最强个人助理ClawdBot、完整安装教程

如何安装2026年最强个人助理ClawdBot、完整安装教程

如何安装 2026 年最强个人助理 ClawdBot、完整安装教程 一、前言 学不完,根本学不完!近期,一款名...