tomcat源码浅析(二)之server.xml的解析
来源:互联网 发布:韩国制衣软件 编辑:程序博客网 时间:2024/04/28 03:08
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");
- }
0 0
- tomcat源码浅析(二)之server.xml的解析
- tomcat源码浅析(四)之web.xml解析
- tomcat源码浅析(三)之webapps的解析
- tomcat源码解析(二)--web.xml文件的解析
- 【Web容器】Tomcat源码分析(2)-server.xml文件的加载与解析
- tomcat源码解析(一)--启动与Server.xml文件的解析
- dubbo源码浅析(二)-标签解析
- jeeCmsV7-src 源码解析之二(application-context.xml)
- Tomcat的服务器配置文件server.xml解析
- Tomcat的服务器配置文件server.xml解析
- Tomcat的服务器配置文件server.xml解析
- Tomcat的server.xml配置文件解析
- tomcat源码解析(二)——xml解析过程分析
- Tomcat源码的catalina中利用Digester解析conf/server.xml
- Tomcat源码的catalina中利用Digester解析conf/server.xml
- tomcat源码浅析(一)之 架构
- Tomcat源码解析(二):server服务管理组件
- Tomcat 8(二)server.xml详解
- 更新UI操作需要在主线程完成
- 基于Java Socket的自定义协议
- 进程与线程的区别与联系
- 八种排序算法
- Executors创建固定线程demo
- tomcat源码浅析(二)之server.xml的解析
- 使用镜像服务站下载CentOS安装包
- 文件加密
- 深入PHP面向对象、模式与实践——生成对象(2)
- Android 开发笔记——通过 Intent 传递类对象
- 数据采集(旅游蚂蜂窝)
- 使用kubeadm在ububtu16.04安装kubernetes1.5.5-flannel
- swarm kubernetes mesos对比
- android依赖注入注解的实现