servlet 之 GenericServlet抽象类详解
GenericSerlvet抽象类源码如下:
- package javax.servlet;
- import java.io.IOException;
- import java.util.Enumeration;
- //抽象类GenericServlet实现了Servlet接口的同时,也实现了ServletConfig接口和Serializable这两个接口
- public abstract class GenericServlet
- implements Servlet, ServletConfig, java.io.Serializable
- {
- //私有变量,保存 init()传入的ServletConfig对象的引用
- private transient ServletConfig config;
- //无参的构造方法
- public GenericServlet() { }
- /*
- ------------------------------------
- 以下方法实现了servlet接口中的5个方法
- 实现Servlet接口方法开始
- ------------------------------------
- */
- /**
- *实现接口Servlet中的带参数的init(ServletConfig Config)方法,将传递的ServletConfig对象的 * 引用保存到私有成员变量中,
- * 使得GenericServlet对象和一个ServletConfig对象关联.
- * 同时它也调用了自身的不带参数的init()方法
- **/
- public void init(ServletConfig config) throws ServletException {
- this.config = config;
- this.init(); //调用了无参的 init()方法
- }
- //无参的init()方法
- public void init() throws ServletException {
- }
- //空实现了destroy方法
- public void destroy() { }
- //实现了接口中的getServletConfig方法,返回ServletConfig对象
- public ServletConfig getServletConfig()
- {
- return config;
- }
- //该方法实现接口<Servlet>中的ServletInfo,默认返回空字符串
- public String getServletInfo() {
- return "";
- }
- //唯一没有实现的抽象方法service(),仅仅在此声明。交由子类去实现具体的应用
- //在后来的HttpServlet抽象类中,针对当前基于Http协议的Web开发,HttpServlet抽象类具体实现了这个方法
- //若有其他的协议,直接继承本类后实现相关协议即可,具有很强的扩展性
- public abstract void service(ServletRequest req, ServletResponse res)
- throws ServletException, IOException;
- /*
- ------------------------------------
- 实现Servlet接口方法结束
- ------------------------------------
- */
- /*
- ---------------------------------------------
- *以下四个方法实现了接口ServletConfig中的方法
- 实现ServletConfig接口开始
- ---------------------------------------------
- */
- //该方法实现了接口<ServletConfig>中的getServletContext方法,用于返回servleConfig对象中所包含的servletContext方法
- public ServletContext getServletContext() {
- return getServletConfig().getServletContext();
- }
- //获取初始化参数
- public String getInitParameter(String name) {
- return getServletConfig().getInitParameter(name);
- }
- //实现了接口<ServletConfig>中的方法,用于返回在web.xml文件中为servlet所配置的全部的初始化参数的值
- public Enumeration getInitParameterNames() {
- return getServletConfig().getInitParameterNames();
- //获取在web.xml文件中注册的当前的这个servlet名称。没有在web.xml 中注册的servlet,该方法直接放回该servlet的类名。
- //该方法实现了接口<ServleConfig>中的getServletName方法
- public String getServletName() {
- return config.getServletName();
- }
- /*
- ---------------------------------------------
- 实现ServletConfig接口结束
- ---------------------------------------------
- */
- public void log(String msg) {
- getServletContext().log(getServletName() + ": "+ msg);
- }
- public void log(String message, Throwable t) {
- getServletContext().log(getServletName() + ": " + message, t);
- }
- }
- GenericServlet类实现了Servlet接口和ServletConfig接口,GenericServlet类的主要身份是Servlet,此外,它还运用装饰设计模式,为自己附加了ServletConfig装饰身份(装饰者设计模式参见《设计模式之装饰者模式》)。在具体实现中,GenericServlet类包装了一个ServletConfig接口的实例,通过该实例来实现ServletConfig接口中的方法。
servlet 之 GenericServlet抽象类详解的更多相关文章
- servlet 之 HttpServlet抽象类详解
Servlet的框架是由两个Java包组成:javax.servlet和javax.servlet.http. 在javax.servlet包中定义了所有的Servlet类都必须实现或扩展的的通用接口 ...
- springboot扫描自定义的servlet和filter代码详解_java - JAVA
文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 这几天使用spring boot编写公司一个应用,在编写了一个filter,用于指定编码的filter,如下: /** ...
- 第7.19节 Python中的抽象类详解:abstractmethod、abc与真实子类
第7.19节 Python中的抽象类详解:abstractmethod.abc与真实子类 一. 引言 前面相关的章节已经介绍过,Python中定义某种类型是以实现了该类型对应的协议为标准的,而不 ...
- servlet的生命周期详解
一.servlet生命周期原理解析 1.Servlet生命周期分为三个阶段: (1)初始化阶段 调用init()方法 (2)响应客户请求阶段 调用service()方法 (3)终止阶段 调用dest ...
- JavaEE基础(02):Servlet核心API用法详解
本文源码:GitHub·点这里 || GitEE·点这里 一.核心API简介 1.Servlet执行流程 Servlet是JavaWeb的三大组件之一(Servlet.Filter.Listener) ...
- servlet的web-xml配置详解
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:// ...
- java抽象类详解
前言 在没讲抽象类之前 我们先来看看 final关键字 final 修饰符 可以修饰 类.属性.方法 修饰类时 表示该类不能被继承 其他特征 跟普通的类一样 修饰 属性时 表示 改属性不能改变 ...
- 第二章.JSP/Servlet及相关技术详解
JSP的4种基本语法: 1.JSP注释: <%-- JSP注释部分 --%> 2.JSP声明: <%! //声明一个整型变量 public int count; //声明一个方法 p ...
- Java接口和抽象类详解
父类定义了相关子类的共有属性和行为.而接口可以定义类的共同行为(包括非相关的类). 了解接口前,先来说说抽象类.抽象类介乎于普通类和接口之间,提供部分实现方法以及未实现方法,可以看作为一个半成品. 抽 ...
随机推荐
- 三、java基础-方法含义_重载_递归
1.java中方法: 方法的含义: 就是一个代码片段,可以完后某个特定的功能,可以重复利用: 定义方法的语法: [方法的修饰符列表] 方法的返回值类型 方法名{ java语句; } 注意 ...
- 伪类:after,:before的用法
:after和:before是css3中的伪类元素.用法是像元素的前或者后插入元素.以after为例: li:after{ content: ''; color: #ff0000; } 意思是向li元 ...
- 《算法图解》[美] Aditya Bhargava(作者)epub+mobi
内容简介 本书示例丰富,图文并茂,以让人容易理解的方式阐释了算法,旨在帮助程序员在日常项目中更好地发挥算法的能量.书中的前三章将帮助你打下基础,带你学习二分查找.大O表示法.两种基本的数据结构以及递归 ...
- vs2015中安装cplex攻略以及解决丢失cplex.dll问题
转:http://blog.sina.com.cn/s/blog_61f0374801014swp.html 按:相信配置过CPLEX的人大多有过痛苦而难忘的经历,本人亦不例外,纠结挣扎了一个下午加一 ...
- 通过开源项目免费申请 IntelliJ IDEA license(激活码)
通过github开源项目免费申请 IntelliJ IDEA license(激活码) 我用来申请的github开源项目:https://github.com/Linliquan/springboot ...
- C语言 Win32 获取显示设备信息
函数 BOOL EnumDisplayDevicesA( LPCSTR lpDevice, DWORD iDevNum, PDISPLAY_DEVICEA lpDisplayDevice, DWORD ...
- Python递归函数如何写?正确的Python递归函数用法!
在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数.一.举个例子,我们来计算阶乘n! = 1 x 2 x 3 x … x n,用函数fact(n)表示,可以看出:fac ...
- [翻译]使用Visual Studio Code怎样调试Rust
我将 Visual Studio Code 作为Rust首选编辑器.遗憾的是 VS Code 不能非常好地完成 Rust 的调试. 配置调试器不难,但仍然需要几个步骤.我已经完整配置了好几次.我正在写 ...
- Postgresql数据库数据简单的导入导出
Postgresql数据库数据简单的导入导出 博客分类: DataBase postgres 命令操作: 数据的导出:pg_dump -U postgres(用户名) (-t 表名) 数据库名( ...
- C# 创建INI文件,写入并可读取。----转载
基于C#winform设计. 首先创建一个类,我命名为IniFiles.并引入命名空间using System.Runtime.InteropServices; 接着,声明API函数 [DllImpo ...