zoukankan      html  css  js  c++  java
  • 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接口中的方法
  • 相关阅读:
    Handling Errors and Exceptions
    Advanced Features of Delphi DLLs
    How to put a relative path for a DLL statically loaded?
    Delphi DLL制作和加载 Static, Dynamic, Delayed 以及 Shared-Memory Manager
    The useful App Paths registry key : HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionApp Paths
    DLL Dynamic-Link Library Search Order
    Can a windows dll retrieve its own filename?
    Restrict form resize -- Delphi
    Programmer in Google Code
    How to open a web site with the default web browser in a NEW window
  • 原文地址:https://www.cnblogs.com/shenhaha520/p/8568802.html
Copyright © 2011-2022 走看看