版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a040600145/article/details/68944699
server.xml的解析是使用Digester来解析的,Digester的详细规则如下:
- protected Digester createStartDigester() {
- long t1=System.currentTimeMillis();
- // Initialize the digester
- Digester digester = new Digester();
- digester.setValidating(false);
- digester.setRulesValidation(true);
- HashMap<Class<?>, List<String>> fakeAttributes =
- new HashMap<Class<?>, List<String>>();
- ArrayList<String> attrs = new ArrayList<String>();
- attrs.add("className");
- fakeAttributes.put(Object.class, attrs);
- digester.setFakeAttributes(fakeAttributes);
- digester.setUseContextClassLoader(true);
- // Configure the actions we will be using
- digester.addObjectCreate("Server",
- "org.apache.catalina.core.StandardServer",
- "className");
- digester.addSetProperties("Server");
- digester.addSetNext("Server",
- "setServer",
- "org.apache.catalina.Server");
- digester.addObjectCreate("Server/GlobalNamingResources",
- "org.apache.catalina.deploy.NamingResources");
- digester.addSetProperties("Server/GlobalNamingResources");
- digester.addSetNext("Server/GlobalNamingResources",
- "setGlobalNamingResources",
- "org.apache.catalina.deploy.NamingResources");
- digester.addObjectCreate("Server/Listener",
- null, // MUST be specified in the element
- "className");
- digester.addSetProperties("Server/Listener");
- digester.addSetNext("Server/Listener",
- "addLifecycleListener",
- "org.apache.catalina.LifecycleListener");
- digester.addObjectCreate("Server/Service",
- "org.apache.catalina.core.StandardService",
- "className");
- digester.addSetProperties("Server/Service");
- digester.addSetNext("Server/Service",
- "addService",
- "org.apache.catalina.Service");
- digester.addObjectCreate("Server/Service/Listener",
- null, // MUST be specified in the element
- "className");
- digester.addSetProperties("Server/Service/Listener");
- digester.addSetNext("Server/Service/Listener",
- "addLifecycleListener",
- "org.apache.catalina.LifecycleListener");
- //Executor
- digester.addObjectCreate("Server/Service/Executor",
- "org.apache.catalina.core.StandardThreadExecutor",
- "className");
- digester.addSetProperties("Server/Service/Executor");
- digester.addSetNext("Server/Service/Executor",
- "addExecutor",
- "org.apache.catalina.Executor");
- digester.addRule("Server/Service/Connector",
- new ConnectorCreateRule());
- digester.addRule("Server/Service/Connector",
- new SetAllPropertiesRule(new String[]{"executor"}));
- digester.addSetNext("Server/Service/Connector",
- "addConnector",
- "org.apache.catalina.connector.Connector");
- digester.addObjectCreate("Server/Service/Connector/Listener",
- null, // MUST be specified in the element
- "className");
- digester.addSetProperties("Server/Service/Connector/Listener");
- digester.addSetNext("Server/Service/Connector/Listener",
- "addLifecycleListener",
- "org.apache.catalina.LifecycleListener");
- // Add RuleSets for nested elements
- digester.addRuleSet(new NamingRuleSet("Server/GlobalNamingResources/"));
- digester.addRuleSet(new EngineRuleSet("Server/Service/"));
- digester.addRuleSet(new HostRuleSet("Server/Service/Engine/"));
- digester.addRuleSet(new ContextRuleSet("Server/Service/Engine/Host/"));
- addClusterRuleSet(digester, "Server/Service/Engine/Host/Cluster/");
- digester.addRuleSet(new NamingRuleSet("Server/Service/Engine/Host/Context/"));
- // When the 'engine' is found, set the parentClassLoader.
- digester.addRule("Server/Service/Engine",
- new SetParentClassLoaderRule(parentClassLoader));
- addClusterRuleSet(digester, "Server/Service/Engine/Cluster/");
- long t2=System.currentTimeMillis();
- if (log.isDebugEnabled()) {
- log.debug("Digester for server.xml created " + ( t2-t1 ));
- }
- return (digester);
- }
- public void begin(String namespace, String name, Attributes attributes)
- throws Exception {
- Service svc = (Service)digester.peek();
- Executor ex = null;
- if ( attributes.getValue("executor")!=null ) {
- ex = svc.getExecutor(attributes.getValue("executor"));
- }
- Connector con = new Connector(attributes.getValue("protocol"));
- if ( ex != null ) _setExecutor(con,ex);
- digester.push(con);
- }
- public void addRuleInstances(Digester digester) {
- digester.addObjectCreate(prefix + "Engine",
- "org.apache.catalina.core.StandardEngine",
- "className");
- digester.addSetProperties(prefix + "Engine");
- digester.addRule(prefix + "Engine",
- new LifecycleListenerRule
- ("org.apache.catalina.startup.EngineConfig",
- "engineConfigClass"));
- digester.addSetNext(prefix + "Engine",
- "setContainer",
- "org.apache.catalina.Container");
- //Cluster configuration start
- digester.addObjectCreate(prefix + "Engine/Cluster",
- null, // MUST be specified in the element
- "className");
- digester.addSetProperties(prefix + "Engine/Cluster");
- digester.addSetNext(prefix + "Engine/Cluster",
- "setCluster",
- "org.apache.catalina.Cluster");
- //Cluster configuration end
- digester.addObjectCreate(prefix + "Engine/Listener",
- null, // MUST be specified in the element
- "className");
- digester.addSetProperties(prefix + "Engine/Listener");
- digester.addSetNext(prefix + "Engine/Listener",
- "addLifecycleListener",
- "org.apache.catalina.LifecycleListener");
- digester.addRuleSet(new RealmRuleSet(prefix + "Engine/"));
- digester.addObjectCreate(prefix + "Engine/Valve",
- null, // MUST be specified in the element
- "className");
- digester.addSetProperties(prefix + "Engine/Valve");
- digester.addSetNext(prefix + "Engine/Valve",
- "addValve",
- "org.apache.catalina.Valve");
- }
- public void addRuleInstances(Digester digester) {
- digester.addObjectCreate(prefix + "Host",
- "org.apache.catalina.core.StandardHost",
- "className");
- digester.addSetProperties(prefix + "Host");
- digester.addRule(prefix + "Host",
- new CopyParentClassLoaderRule());
- digester.addRule(prefix + "Host",
- new LifecycleListenerRule
- ("org.apache.catalina.startup.HostConfig",
- "hostConfigClass"));
- digester.addSetNext(prefix + "Host",
- "addChild",
- "org.apache.catalina.Container");
- digester.addCallMethod(prefix + "Host/Alias",
- "addAlias", 0);
- //Cluster configuration start
- digester.addObjectCreate(prefix + "Host/Cluster",
- null, // MUST be specified in the element
- "className");
- digester.addSetProperties(prefix + "Host/Cluster");
- digester.addSetNext(prefix + "Host/Cluster",
- "setCluster",
- "org.apache.catalina.Cluster");
- //Cluster configuration end
- digester.addObjectCreate(prefix + "Host/Listener",
- null, // MUST be specified in the element
- "className");
- digester.addSetProperties(prefix + "Host/Listener");
- digester.addSetNext(prefix + "Host/Listener",
- "addLifecycleListener",
- "org.apache.catalina.LifecycleListener");
- digester.addRuleSet(new RealmRuleSet(prefix + "Host/"));
- digester.addObjectCreate(prefix + "Host/Valve",
- null, // MUST be specified in the element
- "className");
- digester.addSetProperties(prefix + "Host/Valve");
- digester.addSetNext(prefix + "Host/Valve",
- "addValve",
- "org.apache.catalina.Valve");
- }
- public void addRuleInstances(Digester digester) {
- if (create) {
- digester.addObjectCreate(prefix + "Context",
- "org.apache.catalina.core.StandardContext", "className");
- digester.addSetProperties(prefix + "Context");
- } else {
- digester.addRule(prefix + "Context", new SetContextPropertiesRule());
- }
- if (create) {
- digester.addRule(prefix + "Context",
- new LifecycleListenerRule
- ("org.apache.catalina.startup.ContextConfig",
- "configClass"));
- digester.addSetNext(prefix + "Context",
- "addChild",
- "org.apache.catalina.Container");
- }
- digester.addCallMethod(prefix + "Context/InstanceListener",
- "addInstanceListener", 0);
- digester.addObjectCreate(prefix + "Context/Listener",
- null, // MUST be specified in the element
- "className");
- digester.addSetProperties(prefix + "Context/Listener");
- digester.addSetNext(prefix + "Context/Listener",
- "addLifecycleListener",
- "org.apache.catalina.LifecycleListener");
- digester.addObjectCreate(prefix + "Context/Loader",
- "org.apache.catalina.loader.WebappLoader",
- "className");
- digester.addSetProperties(prefix + "Context/Loader");
- digester.addSetNext(prefix + "Context/Loader",
- "setLoader",
- "org.apache.catalina.Loader");
- digester.addObjectCreate(prefix + "Context/Manager",
- "org.apache.catalina.session.StandardManager",
- "className");
- digester.addSetProperties(prefix + "Context/Manager");
- digester.addSetNext(prefix + "Context/Manager",
- "setManager",
- "org.apache.catalina.Manager");
- digester.addObjectCreate(prefix + "Context/Manager/Store",
- null, // MUST be specified in the element
- "className");
- digester.addSetProperties(prefix + "Context/Manager/Store");
- digester.addSetNext(prefix + "Context/Manager/Store",
- "setStore",
- "org.apache.catalina.Store");
- digester.addObjectCreate(prefix + "Context/Manager/SessionIdGenerator",
- "org.apache.catalina.util.StandardSessionIdGenerator",
- "className");
- digester.addSetProperties(prefix + "Context/Manager/SessionIdGenerator");
- digester.addSetNext(prefix + "Context/Manager/SessionIdGenerator",
- "setSessionIdGenerator",
- "org.apache.catalina.SessionIdGenerator");
- digester.addObjectCreate(prefix + "Context/Parameter",
- "org.apache.catalina.deploy.ApplicationParameter");
- digester.addSetProperties(prefix + "Context/Parameter");
- digester.addSetNext(prefix + "Context/Parameter",
- "addApplicationParameter",
- "org.apache.catalina.deploy.ApplicationParameter");
- digester.addRuleSet(new RealmRuleSet(prefix + "Context/"));
- digester.addObjectCreate(prefix + "Context/Resources",
- "org.apache.naming.resources.FileDirContext",
- "className");
- digester.addSetProperties(prefix + "Context/Resources");
- digester.addSetNext(prefix + "Context/Resources",
- "setResources",
- "javax.naming.directory.DirContext");
- digester.addObjectCreate(prefix + "Context/ResourceLink",
- "org.apache.catalina.deploy.ContextResourceLink");
- digester.addSetProperties(prefix + "Context/ResourceLink");
- digester.addRule(prefix + "Context/ResourceLink",
- new SetNextNamingRule("addResourceLink",
- "org.apache.catalina.deploy.ContextResourceLink"));
- digester.addObjectCreate(prefix + "Context/Valve",
- null, // MUST be specified in the element
- "className");
- digester.addSetProperties(prefix + "Context/Valve");
- digester.addSetNext(prefix + "Context/Valve",
- "addValve",
- "org.apache.catalina.Valve");
- digester.addCallMethod(prefix + "Context/WatchedResource",
- "addWatchedResource", 0);
- digester.addCallMethod(prefix + "Context/WrapperLifecycle",
- "addWrapperLifecycle", 0);
- digester.addCallMethod(prefix + "Context/WrapperListener",
- "addWrapperListener", 0);
- digester.addObjectCreate(prefix + "Context/JarScanner",
- "org.apache.tomcat.util.scan.StandardJarScanner",
- "className");
- digester.addSetProperties(prefix + "Context/JarScanner");
- digester.addSetNext(prefix + "Context/JarScanner",
- "setJarScanner",
- "org.apache.tomcat.JarScanner");
- }