tomcat源码浅析(二)之server.xml的解析

来源:互联网 发布:韩国制衣软件 编辑:程序博客网 时间:2024/04/28 03:08
server.xml的解析是使用Digester来解析的,Digester的详细规则如下:
Catalina.createstartdigester代码
  1. protected Digester createStartDigester() {  
  2.         long t1=System.currentTimeMillis();  
  3.         // Initialize the digester  
  4.         Digester digester = new Digester();  
  5.         digester.setValidating(false);  
  6.         digester.setRulesValidation(true);  
  7.         HashMap<Class<?>, List<String>> fakeAttributes =  
  8.             new HashMap<Class<?>, List<String>>();  
  9.         ArrayList<String> attrs = new ArrayList<String>();  
  10.         attrs.add("className");  
  11.         fakeAttributes.put(Object.class, attrs);  
  12.         digester.setFakeAttributes(fakeAttributes);  
  13.         digester.setUseContextClassLoader(true);  
  14.   
  15.         // Configure the actions we will be using  
  16.         digester.addObjectCreate("Server",  
  17.                                  "org.apache.catalina.core.StandardServer",  
  18.                                  "className");  
  19.         digester.addSetProperties("Server");  
  20.         digester.addSetNext("Server",  
  21.                             "setServer",  
  22.                             "org.apache.catalina.Server");  
  23.   
  24.         digester.addObjectCreate("Server/GlobalNamingResources",  
  25.                                  "org.apache.catalina.deploy.NamingResources");  
  26.         digester.addSetProperties("Server/GlobalNamingResources");  
  27.         digester.addSetNext("Server/GlobalNamingResources",  
  28.                             "setGlobalNamingResources",  
  29.                             "org.apache.catalina.deploy.NamingResources");  
  30.   
  31.         digester.addObjectCreate("Server/Listener",  
  32.                                  null, // MUST be specified in the element  
  33.                                  "className");  
  34.         digester.addSetProperties("Server/Listener");  
  35.         digester.addSetNext("Server/Listener",  
  36.                             "addLifecycleListener",  
  37.                             "org.apache.catalina.LifecycleListener");  
  38.   
  39.         digester.addObjectCreate("Server/Service",  
  40.                                  "org.apache.catalina.core.StandardService",  
  41.                                  "className");  
  42.         digester.addSetProperties("Server/Service");  
  43.         digester.addSetNext("Server/Service",  
  44.                             "addService",  
  45.                             "org.apache.catalina.Service");  
  46.   
  47.         digester.addObjectCreate("Server/Service/Listener",  
  48.                                  null, // MUST be specified in the element  
  49.                                  "className");  
  50.         digester.addSetProperties("Server/Service/Listener");  
  51.         digester.addSetNext("Server/Service/Listener",  
  52.                             "addLifecycleListener",  
  53.                             "org.apache.catalina.LifecycleListener");  
  54.   
  55.         //Executor  
  56.         digester.addObjectCreate("Server/Service/Executor",  
  57.                          "org.apache.catalina.core.StandardThreadExecutor",  
  58.                          "className");  
  59.         digester.addSetProperties("Server/Service/Executor");  
  60.   
  61.         digester.addSetNext("Server/Service/Executor",  
  62.                             "addExecutor",  
  63.                             "org.apache.catalina.Executor");  
  64.   
  65.   
  66.         digester.addRule("Server/Service/Connector",  
  67.                          new ConnectorCreateRule());  
  68.         digester.addRule("Server/Service/Connector",  
  69.                          new SetAllPropertiesRule(new String[]{"executor"}));  
  70.         digester.addSetNext("Server/Service/Connector",  
  71.                             "addConnector",  
  72.                             "org.apache.catalina.connector.Connector");  
  73.   
  74.   
  75.         digester.addObjectCreate("Server/Service/Connector/Listener",  
  76.                                  null, // MUST be specified in the element  
  77.                                  "className");  
  78.         digester.addSetProperties("Server/Service/Connector/Listener");  
  79.         digester.addSetNext("Server/Service/Connector/Listener",  
  80.                             "addLifecycleListener",  
  81.                             "org.apache.catalina.LifecycleListener");  
  82.   
  83.         // Add RuleSets for nested elements  
  84.         digester.addRuleSet(new NamingRuleSet("Server/GlobalNamingResources/"));  
  85.         digester.addRuleSet(new EngineRuleSet("Server/Service/"));  
  86.         digester.addRuleSet(new HostRuleSet("Server/Service/Engine/"));  
  87.         digester.addRuleSet(new ContextRuleSet("Server/Service/Engine/Host/"));  
  88.         addClusterRuleSet(digester, "Server/Service/Engine/Host/Cluster/");  
  89.         digester.addRuleSet(new NamingRuleSet("Server/Service/Engine/Host/Context/"));  
  90.   
  91.         // When the 'engine' is found, set the parentClassLoader.  
  92.         digester.addRule("Server/Service/Engine",  
  93.                          new SetParentClassLoaderRule(parentClassLoader));  
  94.         addClusterRuleSet(digester, "Server/Service/Engine/Cluster/");  
  95.   
  96.         long t2=System.currentTimeMillis();  
  97.         if (log.isDebugEnabled()) {  
  98.             log.debug("Digester for server.xml created " + ( t2-t1 ));  
  99.         }  
  100.         return (digester);  
  101.   
  102.     }  

 

Connectorcreaterule.begin()代码
  1. public void begin(String namespace, String name, Attributes attributes)  
  2.             throws Exception {  
  3.         Service svc = (Service)digester.peek();  
  4.         Executor ex = null;  
  5.         if ( attributes.getValue("executor")!=null ) {  
  6.             ex = svc.getExecutor(attributes.getValue("executor"));  
  7.         }  
  8.         Connector con = new Connector(attributes.getValue("protocol"));  
  9.         if ( ex != null )  _setExecutor(con,ex);  
  10.           
  11.         digester.push(con);  
  12.     }  

 

Engineruleset.addruleinstances代码
  1. public void addRuleInstances(Digester digester) {  
  2.           
  3.         digester.addObjectCreate(prefix + "Engine",  
  4.                                  "org.apache.catalina.core.StandardEngine",  
  5.                                  "className");  
  6.         digester.addSetProperties(prefix + "Engine");  
  7.         digester.addRule(prefix + "Engine",  
  8.                          new LifecycleListenerRule  
  9.                          ("org.apache.catalina.startup.EngineConfig",  
  10.                           "engineConfigClass"));  
  11.         digester.addSetNext(prefix + "Engine",  
  12.                             "setContainer",  
  13.                             "org.apache.catalina.Container");  
  14.   
  15.         //Cluster configuration start  
  16.         digester.addObjectCreate(prefix + "Engine/Cluster",  
  17.                                  null, // MUST be specified in the element  
  18.                                  "className");  
  19.         digester.addSetProperties(prefix + "Engine/Cluster");  
  20.         digester.addSetNext(prefix + "Engine/Cluster",  
  21.                             "setCluster",  
  22.                             "org.apache.catalina.Cluster");  
  23.         //Cluster configuration end  
  24.   
  25.         digester.addObjectCreate(prefix + "Engine/Listener",  
  26.                                  null, // MUST be specified in the element  
  27.                                  "className");  
  28.         digester.addSetProperties(prefix + "Engine/Listener");  
  29.         digester.addSetNext(prefix + "Engine/Listener",  
  30.                             "addLifecycleListener",  
  31.                             "org.apache.catalina.LifecycleListener");  
  32.   
  33.   
  34.         digester.addRuleSet(new RealmRuleSet(prefix + "Engine/"));  
  35.   
  36.         digester.addObjectCreate(prefix + "Engine/Valve",  
  37.                                  null, // MUST be specified in the element  
  38.                                  "className");  
  39.         digester.addSetProperties(prefix + "Engine/Valve");  
  40.         digester.addSetNext(prefix + "Engine/Valve",  
  41.                             "addValve",  
  42.                             "org.apache.catalina.Valve");  
  43.   
  44.     }  

 

Hostruleset.addruleinstances代码
  1. public void addRuleInstances(Digester digester) {  
  2.   
  3.         digester.addObjectCreate(prefix + "Host",  
  4.                                  "org.apache.catalina.core.StandardHost",  
  5.                                  "className");  
  6.         digester.addSetProperties(prefix + "Host");  
  7.         digester.addRule(prefix + "Host",  
  8.                          new CopyParentClassLoaderRule());  
  9.         digester.addRule(prefix + "Host",  
  10.                          new LifecycleListenerRule  
  11.                          ("org.apache.catalina.startup.HostConfig",  
  12.                           "hostConfigClass"));  
  13.         digester.addSetNext(prefix + "Host",  
  14.                             "addChild",  
  15.                             "org.apache.catalina.Container");  
  16.   
  17.         digester.addCallMethod(prefix + "Host/Alias",  
  18.                                "addAlias"0);  
  19.   
  20.         //Cluster configuration start  
  21.         digester.addObjectCreate(prefix + "Host/Cluster",  
  22.                                  null, // MUST be specified in the element  
  23.                                  "className");  
  24.         digester.addSetProperties(prefix + "Host/Cluster");  
  25.         digester.addSetNext(prefix + "Host/Cluster",  
  26.                             "setCluster",  
  27.                             "org.apache.catalina.Cluster");  
  28.         //Cluster configuration end  
  29.   
  30.         digester.addObjectCreate(prefix + "Host/Listener",  
  31.                                  null, // MUST be specified in the element  
  32.                                  "className");  
  33.         digester.addSetProperties(prefix + "Host/Listener");  
  34.         digester.addSetNext(prefix + "Host/Listener",  
  35.                             "addLifecycleListener",  
  36.                             "org.apache.catalina.LifecycleListener");  
  37.   
  38.         digester.addRuleSet(new RealmRuleSet(prefix + "Host/"));  
  39.   
  40.         digester.addObjectCreate(prefix + "Host/Valve",  
  41.                                  null, // MUST be specified in the element  
  42.                                  "className");  
  43.         digester.addSetProperties(prefix + "Host/Valve");  
  44.         digester.addSetNext(prefix + "Host/Valve",  
  45.                             "addValve",  
  46.                             "org.apache.catalina.Valve");  
  47.   
  48.     }  

 

Contextruleset.addruleinstances代码
  1. public void addRuleInstances(Digester digester) {  
  2.   
  3.         if (create) {  
  4.             digester.addObjectCreate(prefix + "Context",  
  5.                     "org.apache.catalina.core.StandardContext""className");  
  6.             digester.addSetProperties(prefix + "Context");  
  7.         } else {  
  8.             digester.addRule(prefix + "Context", new SetContextPropertiesRule());  
  9.         }  
  10.   
  11.         if (create) {  
  12.             digester.addRule(prefix + "Context",  
  13.                              new LifecycleListenerRule  
  14.                                  ("org.apache.catalina.startup.ContextConfig",  
  15.                                   "configClass"));  
  16.             digester.addSetNext(prefix + "Context",  
  17.                                 "addChild",  
  18.                                 "org.apache.catalina.Container");  
  19.         }  
  20.         digester.addCallMethod(prefix + "Context/InstanceListener",  
  21.                                "addInstanceListener"0);  
  22.   
  23.         digester.addObjectCreate(prefix + "Context/Listener",  
  24.                                  null, // MUST be specified in the element  
  25.                                  "className");  
  26.         digester.addSetProperties(prefix + "Context/Listener");  
  27.         digester.addSetNext(prefix + "Context/Listener",  
  28.                             "addLifecycleListener",  
  29.                             "org.apache.catalina.LifecycleListener");  
  30.   
  31.         digester.addObjectCreate(prefix + "Context/Loader",  
  32.                             "org.apache.catalina.loader.WebappLoader",  
  33.                             "className");  
  34.         digester.addSetProperties(prefix + "Context/Loader");  
  35.         digester.addSetNext(prefix + "Context/Loader",  
  36.                             "setLoader",  
  37.                             "org.apache.catalina.Loader");  
  38.   
  39.         digester.addObjectCreate(prefix + "Context/Manager",  
  40.                                  "org.apache.catalina.session.StandardManager",  
  41.                                  "className");  
  42.         digester.addSetProperties(prefix + "Context/Manager");  
  43.         digester.addSetNext(prefix + "Context/Manager",  
  44.                             "setManager",  
  45.                             "org.apache.catalina.Manager");  
  46.   
  47.         digester.addObjectCreate(prefix + "Context/Manager/Store",  
  48.                                  null, // MUST be specified in the element  
  49.                                  "className");  
  50.         digester.addSetProperties(prefix + "Context/Manager/Store");  
  51.         digester.addSetNext(prefix + "Context/Manager/Store",  
  52.                             "setStore",  
  53.                             "org.apache.catalina.Store");  
  54.   
  55.         digester.addObjectCreate(prefix + "Context/Manager/SessionIdGenerator",  
  56.                                  "org.apache.catalina.util.StandardSessionIdGenerator",  
  57.                                  "className");  
  58.         digester.addSetProperties(prefix + "Context/Manager/SessionIdGenerator");  
  59.         digester.addSetNext(prefix + "Context/Manager/SessionIdGenerator",  
  60.                             "setSessionIdGenerator",  
  61.                             "org.apache.catalina.SessionIdGenerator");  
  62.   
  63.         digester.addObjectCreate(prefix + "Context/Parameter",  
  64.                                  "org.apache.catalina.deploy.ApplicationParameter");  
  65.         digester.addSetProperties(prefix + "Context/Parameter");  
  66.         digester.addSetNext(prefix + "Context/Parameter",  
  67.                             "addApplicationParameter",  
  68.                             "org.apache.catalina.deploy.ApplicationParameter");  
  69.   
  70.         digester.addRuleSet(new RealmRuleSet(prefix + "Context/"));  
  71.   
  72.         digester.addObjectCreate(prefix + "Context/Resources",  
  73.                                  "org.apache.naming.resources.FileDirContext",  
  74.                                  "className");  
  75.         digester.addSetProperties(prefix + "Context/Resources");  
  76.         digester.addSetNext(prefix + "Context/Resources",  
  77.                             "setResources",  
  78.                             "javax.naming.directory.DirContext");  
  79.   
  80.         digester.addObjectCreate(prefix + "Context/ResourceLink",  
  81.                 "org.apache.catalina.deploy.ContextResourceLink");  
  82.         digester.addSetProperties(prefix + "Context/ResourceLink");  
  83.         digester.addRule(prefix + "Context/ResourceLink",  
  84.                 new SetNextNamingRule("addResourceLink",  
  85.                         "org.apache.catalina.deploy.ContextResourceLink"));  
  86.   
  87.         digester.addObjectCreate(prefix + "Context/Valve",  
  88.                                  null, // MUST be specified in the element  
  89.                                  "className");  
  90.         digester.addSetProperties(prefix + "Context/Valve");  
  91.         digester.addSetNext(prefix + "Context/Valve",  
  92.                             "addValve",  
  93.                             "org.apache.catalina.Valve");  
  94.   
  95.         digester.addCallMethod(prefix + "Context/WatchedResource",  
  96.                                "addWatchedResource"0);  
  97.   
  98.         digester.addCallMethod(prefix + "Context/WrapperLifecycle",  
  99.                                "addWrapperLifecycle"0);  
  100.   
  101.         digester.addCallMethod(prefix + "Context/WrapperListener",  
  102.                                "addWrapperListener"0);  
  103.   
  104.         digester.addObjectCreate(prefix + "Context/JarScanner",  
  105.                                  "org.apache.tomcat.util.scan.StandardJarScanner",  
  106.                                  "className");  
  107.         digester.addSetProperties(prefix + "Context/JarScanner");  
  108.         digester.addSetNext(prefix + "Context/JarScanner",  
  109.                             "setJarScanner",  
  110.                             "org.apache.tomcat.JarScanner");  
  111.   
  112.     }  
0 0