• servlet 之 GenericServlet抽象类详解


    GenericSerlvet抽象类源码如下:

    1. package javax.servlet;    
    2.         
    3.     import java.io.IOException;    
    4.     import java.util.Enumeration;    
    5.         
    6.     //抽象类GenericServlet实现了Servlet接口的同时,也实现了ServletConfig接口和Serializable这两个接口     
    7.     public abstract class GenericServlet     
    8.         implements Servlet, ServletConfig, java.io.Serializable    
    9.     {    
    10.         //私有变量,保存 init()传入的ServletConfig对象的引用    
    11.         private transient ServletConfig config;    
    12.             
    13.         //无参的构造方法    
    14.         public GenericServlet() { }    
    15.         /*   
    16.         ------------------------------------   
    17.         以下方法实现了servlet接口中的5个方法   
    18.         实现Servlet接口方法开始   
    19.         ------------------------------------   
    20.         */        
    21.         /**   
    22.         *实现接口Servlet中的带参数的init(ServletConfig Config)方法,将传递的ServletConfig对象的          *       引用保存到私有成员变量中,   
    23.       *  使得GenericServlet对象和一个ServletConfig对象关联.   
    24.       *  同时它也调用了自身的不带参数的init()方法   
    25.         **/           
    26.         public void init(ServletConfig config) throws ServletException {    
    27.           this.config = config;    
    28.           this.init();   //调用了无参的 init()方法    
    29.         }         
    30.         //无参的init()方法    
    31.         public void init() throws ServletException {       
    32.         }    
    33.                 
    34.         //空实现了destroy方法    
    35.         public void destroy() { }        
    36.       
    37.         //实现了接口中的getServletConfig方法,返回ServletConfig对象    
    38.         public ServletConfig getServletConfig()     
    39.         {    
    40.            return config;    
    41.         }        
    42.         
    43.         //该方法实现接口<Servlet>中的ServletInfo,默认返回空字符串    
    44.         public String getServletInfo() {    
    45.            return "";    
    46.         }    
    47.   
    48.         //唯一没有实现的抽象方法service(),仅仅在此声明。交由子类去实现具体的应用     
    49.        //在后来的HttpServlet抽象类中,针对当前基于Http协议的Web开发,HttpServlet抽象类具体实现了这个方法    
    50.        //若有其他的协议,直接继承本类后实现相关协议即可,具有很强的扩展性      
    51.         public abstract void service(ServletRequest req, ServletResponse res)    
    52.      throws ServletException, IOException;        
    53.         /*   
    54.         ------------------------------------   
    55.         实现Servlet接口方法结束   
    56.         ------------------------------------   
    57.         */    
    58.   
    59.       /*   
    60.       ---------------------------------------------   
    61.        *以下四个方法实现了接口ServletConfig中的方法   
    62.        实现ServletConfig接口开始   
    63.       ---------------------------------------------   
    64.        */    
    65.       //该方法实现了接口<ServletConfig>中的getServletContext方法,用于返回servleConfig对象中所包含的servletContext方法    
    66.         public ServletContext getServletContext() {    
    67.            return getServletConfig().getServletContext();    
    68.         }    
    69.         //获取初始化参数    
    70.         public String getInitParameter(String name) {    
    71.          return getServletConfig().getInitParameter(name);    
    72.         }    
    73.         //实现了接口<ServletConfig>中的方法,用于返回在web.xml文件中为servlet所配置的全部的初始化参数的值    
    74.         public Enumeration getInitParameterNames() {    
    75.            return getServletConfig().getInitParameterNames();    
    76.        //获取在web.xml文件中注册的当前的这个servlet名称。没有在web.xml 中注册的servlet,该方法直接放回该servlet的类名。    
    77.        //该方法实现了接口<ServleConfig>中的getServletName方法      
    78.         public String getServletName() {    
    79.             return config.getServletName();    
    80.         }    
    81.        /*   
    82.       ---------------------------------------------   
    83.        实现ServletConfig接口结束   
    84.       ---------------------------------------------   
    85.      */     
    86.         public void log(String msg) {    
    87.            getServletContext().log(getServletName() + ": "+ msg);    
    88.         }      
    89.         public void log(String message, Throwable t) {    
    90.            getServletContext().log(getServletName() + ": " + message, t);    
    91.         }    
    92.     }   
    93. GenericServlet类实现了Servlet接口和ServletConfig接口,GenericServlet类的主要身份是Servlet,此外,它还运用装饰设计模式,为自己附加了ServletConfig装饰身份(装饰者设计模式参见《设计模式之装饰者模式》)。在具体实现中,GenericServlet类包装了一个ServletConfig接口的实例,通过该实例来实现ServletConfig接口中的方法
  • 相关阅读:
    POJ 1611 The Suspects
    POJ 2001 Shortest Prefixes(字典树)
    HDU 1251 统计难题(字典树 裸题 链表做法)
    G++ C++之区别
    PAT 乙级 1013. 数素数 (20)
    PAT 乙级 1012. 数字分类 (20)
    PAT 乙级 1009. 说反话 (20)
    PAT 乙级 1008. 数组元素循环右移问题 (20)
    HDU 6063 17多校3 RXD and math(暴力打表题)
    HDU 6066 17多校3 RXD's date(超水题)
  • 原文地址:https://www.cnblogs.com/shenhaha520/p/8568802.html
Copyright © 2020-2023  润新知