GenericSerlvet抽象类源码如下:

  1. package javax.servlet;
  2. import java.io.IOException;
  3. import java.util.Enumeration;
  4. //抽象类GenericServlet实现了Servlet接口的同时,也实现了ServletConfig接口和Serializable这两个接口
  5. public abstract class GenericServlet
  6. implements Servlet, ServletConfig, java.io.Serializable
  7. {
  8. //私有变量,保存 init()传入的ServletConfig对象的引用
  9. private transient ServletConfig config;
  10. //无参的构造方法
  11. public GenericServlet() { }
  12. /*
  13. ------------------------------------
  14. 以下方法实现了servlet接口中的5个方法
  15. 实现Servlet接口方法开始
  16. ------------------------------------
  17. */
  18. /**
  19. *实现接口Servlet中的带参数的init(ServletConfig Config)方法,将传递的ServletConfig对象的          *       引用保存到私有成员变量中,
  20. *  使得GenericServlet对象和一个ServletConfig对象关联.
  21. *  同时它也调用了自身的不带参数的init()方法
  22. **/
  23. public void init(ServletConfig config) throws ServletException {
  24. this.config = config;
  25. this.init();   //调用了无参的 init()方法
  26. }
  27. //无参的init()方法
  28. public void init() throws ServletException {
  29. }
  30. //空实现了destroy方法
  31. public void destroy() { }
  32. //实现了接口中的getServletConfig方法,返回ServletConfig对象
  33. public ServletConfig getServletConfig()
  34. {
  35. return config;
  36. }
  37. //该方法实现接口<Servlet>中的ServletInfo,默认返回空字符串
  38. public String getServletInfo() {
  39. return "";
  40. }
  41. //唯一没有实现的抽象方法service(),仅仅在此声明。交由子类去实现具体的应用
  42. //在后来的HttpServlet抽象类中,针对当前基于Http协议的Web开发,HttpServlet抽象类具体实现了这个方法
  43. //若有其他的协议,直接继承本类后实现相关协议即可,具有很强的扩展性
  44. public abstract void service(ServletRequest req, ServletResponse res)
  45. throws ServletException, IOException;
  46. /*
  47. ------------------------------------
  48. 实现Servlet接口方法结束
  49. ------------------------------------
  50. */
  51. /*
  52. ---------------------------------------------
  53. *以下四个方法实现了接口ServletConfig中的方法
  54. 实现ServletConfig接口开始
  55. ---------------------------------------------
  56. */
  57. //该方法实现了接口<ServletConfig>中的getServletContext方法,用于返回servleConfig对象中所包含的servletContext方法
  58. public ServletContext getServletContext() {
  59. return getServletConfig().getServletContext();
  60. }
  61. //获取初始化参数
  62. public String getInitParameter(String name) {
  63. return getServletConfig().getInitParameter(name);
  64. }
  65. //实现了接口<ServletConfig>中的方法,用于返回在web.xml文件中为servlet所配置的全部的初始化参数的值
  66. public Enumeration getInitParameterNames() {
  67. return getServletConfig().getInitParameterNames();
  68. //获取在web.xml文件中注册的当前的这个servlet名称。没有在web.xml 中注册的servlet,该方法直接放回该servlet的类名。
  69. //该方法实现了接口<ServleConfig>中的getServletName方法
  70. public String getServletName() {
  71. return config.getServletName();
  72. }
  73. /*
  74. ---------------------------------------------
  75. 实现ServletConfig接口结束
  76. ---------------------------------------------
  77. */
  78. public void log(String msg) {
  79. getServletContext().log(getServletName() + ": "+ msg);
  80. }
  81. public void log(String message, Throwable t) {
  82. getServletContext().log(getServletName() + ": " + message, t);
  83. }
  84. }
  85. GenericServlet类实现了Servlet接口和ServletConfig接口,GenericServlet类的主要身份是Servlet,此外,它还运用装饰设计模式,为自己附加了ServletConfig装饰身份(装饰者设计模式参见《设计模式之装饰者模式》)。在具体实现中,GenericServlet类包装了一个ServletConfig接口的实例,通过该实例来实现ServletConfig接口中的方法。

servlet 之 GenericServlet抽象类详解的更多相关文章

  1. servlet 之 HttpServlet抽象类详解

    Servlet的框架是由两个Java包组成:javax.servlet和javax.servlet.http. 在javax.servlet包中定义了所有的Servlet类都必须实现或扩展的的通用接口 ...

  2. springboot扫描自定义的servlet和filter代码详解_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 这几天使用spring boot编写公司一个应用,在编写了一个filter,用于指定编码的filter,如下: /** ...

  3. 第7.19节 Python中的抽象类详解:abstractmethod、abc与真实子类

    第7.19节 Python中的抽象类详解:abstractmethod.abc与真实子类 一.    引言 前面相关的章节已经介绍过,Python中定义某种类型是以实现了该类型对应的协议为标准的,而不 ...

  4. servlet的生命周期详解

    一.servlet生命周期原理解析 1.Servlet生命周期分为三个阶段: (1)初始化阶段  调用init()方法 (2)响应客户请求阶段 调用service()方法 (3)终止阶段 调用dest ...

  5. JavaEE基础(02):Servlet核心API用法详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.核心API简介 1.Servlet执行流程 Servlet是JavaWeb的三大组件之一(Servlet.Filter.Listener) ...

  6. servlet的web-xml配置详解

    <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:// ...

  7. java抽象类详解

    前言 在没讲抽象类之前  我们先来看看 final关键字 final 修饰符 可以修饰 类.属性.方法 修饰类时  表示该类不能被继承   其他特征 跟普通的类一样 修饰 属性时 表示 改属性不能改变 ...

  8. 第二章.JSP/Servlet及相关技术详解

    JSP的4种基本语法: 1.JSP注释: <%-- JSP注释部分 --%> 2.JSP声明: <%! //声明一个整型变量 public int count; //声明一个方法 p ...

  9. Java接口和抽象类详解

    父类定义了相关子类的共有属性和行为.而接口可以定义类的共同行为(包括非相关的类). 了解接口前,先来说说抽象类.抽象类介乎于普通类和接口之间,提供部分实现方法以及未实现方法,可以看作为一个半成品. 抽 ...

随机推荐

  1. I Hate it-HDU1754 点修改+区间最大值

    题意: 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.这让很多学生很反感.不管你喜不喜欢, 现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当然, ...

  2. VS2008 error PRJ0002 : 错误的结果 31 (从“C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\rc.exe”返回)。

    解决方案,选择属性->配置属性->清单工具->输入和输出->嵌入清单,把是改成否

  3. ZCGL大数据平台性能优化

    对HBase数据库建索引 参见:基于Phoenix对HBase建索引   https://www.cnblogs.com/ratels/p/11203313.html 将HBase访问微服务整合到模块 ...

  4. 「AT1983 BBQ Hard」

    呦,来一次久违的BBQ吧! AT题...日本的题库质量一向很高 这题是有关组合数的DP... 前置芝士 快速计算组合数,具体还是自行百度. 膜域下的除法. 具体做法 题目中的问题: \(\sum_{i ...

  5. DataReader和DataAdapter的区别

    SqlDataReader是一个向前的指针,本身并不包含数据,调用一次Read()方法它就向前到下一条记录,一个SqlDataReader必须单独占用一个打开的数据库连接. 在使用 SqlDataRe ...

  6. 吴裕雄--天生自然JAVA数据库编程:CallableStatement接口

    DELIMITER // DROP PROCEDURE myproc // -- 删除过程 CREATE PROCEDURE myproc(IN p1 int,INOUT p2 int,OUT p3 ...

  7. python进阶强化学习

    最近学习了慕课的python进阶强化训练,将学习的内容记录到这里,同时也增加了很多相关知识. 主要分为以下九个模块: 基本使用 迭代器和生成器 字符串 文件IO操作 自定义类和类的继承 函数装饰器和类 ...

  8. chromedriver版本问题

    最新的chromedriver 66.0.3359.117 的对应chromedriver版本为2.38 http://npm.taobao.org/mirrors/chromedriver/ Web ...

  9. Day8 - F - Tree POJ - 1741

    Give a tree with n vertices,each edge has a length(positive integer less than 1001).Define dist(u,v) ...

  10. Go 函数与闭包

    函数 1.函数与闭包 func adder() func (value int){ sum := 0 return func(value int) int{ sum += value return s ...