Digester库

  在之前所学习关于启动简单的Tomcat部分实现的代码中,我们使用一个启动类Bootstrap类 来实例化连接器、servlet容器、wrapper实例、和其他组件,然后调用各个对象的set方法将他们关联起来,例如。要实例化一个连接器 和 一个 servlet容器,可以使用下列代码

// 初始化一个连接器
        Connector connector = new HttpConnector();
// 初始化一个Context容器
        Context context = new StandardContext();

然后在使用下面的代码将它们关联起来

connector.setContainer(context);

当然了 如果使用了服务器和服务组件虽然 不需要上面这一步 但是 还是需要其他set资源

接着在调用各个对象的set方法为其设置各种属性,例如可以用Context实例的setPath 和 setDocBase方法设置其path 和 docBase属性,

// 设置根路径 从 浏览器请求 该Context的地址 也就是 /app1
        context.setPath("/app1");
        // 设置根文件夹
        context.setDocBase("app1");

然后,可以通过实例化各种组件,并调用Context对象调用响应的add方法将这些组件添加到Context对象中,例如下面的diamante展示如何为Context对象添加一个生命周期监听器 和一个载入器 和 添加子容器

        // 给StandardContext 创建一个 配置监听器
        LifecycleListener listener = new SimpleContextConfig();

        ((Lifecycle) context).addLifecycleListener(listener);
context.addChild(wrapper1);
        context.addChild(wrapper2);
Loader loader = new WebappLoader();
		context.setLoader(loader);

  在完成关联  和添加组件的所有必要操作之后,就可以调用连接器的initialize方法和 start方法,以及servlet容器的start方法来启动整个应用程序,

    connector.initialize();
            ((Lifecycle) connector).start();
            ((Lifecycle) context).start();

  这种配置应用程序的方法有一个明显缺陷,即所有的配置都必须硬编码,调整组件配置或属性值都 必须要要重新编译Bootstrap类,幸运的是,Tomcat的设计者使用了一种更加优雅的配置方式,即使用一个名为server.xml的XML文档来对应用程序进行配置,server.xml文件中的每个元素都会转化为一个java对象,元素的属性会用于设置java对象的属性,这样,就可以通过简单的编辑server.xml文件来修改Tomcat的配置,例如 server.xml文件中的Context元素表示一个Context实例:

  

<context/>

要为Context实例设置path属性 和 docBase属性,可以使用这样的配置:

<context docBase="myApp" path="/myApp"/>

Tomcat使用了开源库Digester来将XML文档中的元素转化成java对象,

由于一个Context实例表示一个Web应用程序,因此配置Web应用程序是通过对已经实例化的Context实例进行配置的,用来配置Web应用程序的XML文件的名称是web.xml,该文件位于Web应用程序的WEB-INF目录下。

Digester库

  Digester是Apache软件基金会的Jakarta项目下的子 Commons项目下的一个开源项目,可以从http://jakarta.apache.org/commons/digester/下载Digester库,Digester API 包含3个包,三者都被打包到commons-digester.jar文件中。

  • org.apache.commons.digester : 该包提供了基于规则的、可吹了任意XML文档的类;
  • org.apache.commons.digester.rss : 该包 包含了一些可以用来解析与很多新闻源使用的RSS(Rich Site Summary,富站点摘要)格式兼容的XML文档的类;
  • org.apahce.commons.figester.xmlrules; 该包 为Digester库提供了一些规则继续XML的定义;

Digester类

  org.apahce.commons.digester.Digester类时Digester库中的主类,该类用于解析XML文档。对于XML文档中的每个元素,Digester对象都会检查它是否要做事先预定义的事件。在调用DIgester对象的parse方法之前,程序员要定义好Digester对象要执行哪一些操作。

  那么如何定义在Digester对象遇到某个XML元素时它应该执行什么动作呢?很简单,程序员要先定义好模式,然后将每个模式与一条或者多条规则相关联,XML文档中根元素的模式与元素的名字相同。

原文地址:https://www.cnblogs.com/ChenD/p/10158947.html

时间: 2024-08-30 16:04:35

Digester库的相关文章

How tomcat works 读书笔记十五 Digester库

Digester库 在前面的几个章节里,我们对tomcat里各个组件的配置完全是使用写硬编码的形式完成的. 如 Context context = new StandardContext(); Loader loader = new WebappLoader(); context.setLoader(loader); 就完成了向context容器里添加WepappLoader的功能. 这么做的问题就在于,一旦我想更改配置就必须得重新加载Bootstrap类. 幸运的是tomcat的设计者使用了一

How tomcat works 读书笔记十五 Digester库 下

在这一节里我们说说ContextConfig这个类. 这个类在很早的时候我们就已经使用了(之前那个叫SimpleContextConfig),但是在之前它干的事情都很简单,就是吧context里的configured变量置为true.在这里我们看看完整版的ContextConfig都干了什么. 在tomcat的实际部署中,StandContext类的实际监听器是org.apache.catalina.startup.ContextConfig的实例. ContextConfig完成加载验证器阀,

tomcat(15)Digester库

[0]README 0.1)本文部分文字描述转自 "how tomcat works",旨在学习 "tomcat(15)Digester库" 的基础知识: 2)problem+solution: 2.1)problem:如下面的代码,Bootstrap类实例化连接器,servlet容器,Wrapper容器和其它组件,如设置连接器的关联顶层容器,通过set方法将它们联系起来:如监听器组件通过addLifecycleListener来设置等等.这种配置应用程序的方法有一

tomcat启动过程分析

1.通过catalina.sh start脚本启动,调用org.apache.catalina.startup.Bootstrap的main方法,传人参数start,首先是创建一个Bootstrap的实例并付给static变量daemon,然后调用daemon的init方法,在init方法中设置catalina-home,catalina-base,之后根据catalina.properties的配置创建commonLoader(父loader为空).catalinaLoader.sharedL

tomat(16)关闭钩子

[0]REAMDE 0)本文部分文字描述转自:"how tomcat works",旨在学习"tomat(16)关闭钩子"的相关知识: 1)problem+solution: 1.1)problem:在很多实际环境中,当用户关闭应用程序时,并不会按照推荐的方法关闭应用程序,很有可能不做清理工作: 1.2)solution:java 为程序员提供了一种优雅的方法可以在在关闭过程中执行一些代码,以确保那些负责善后处理的代码可能能够执行: 2)在java中,虚拟机会对两类

Spring4.2.6+SpringMVC4.2.6+MyBatis3.4.0 整合

[0]README 0)本文旨在 review Spring4.2.6+SpringMVC4.2.6+MyBatis3.4.0 整合过程: 1)项目整合所涉及的源代码,please visit  https://github.com/pacosonTang/MyBatis/tree/master/spring4mvc_mybatis3 2)由于晚辈我还不怎么熟悉maven,所以没有用maven依赖各种jar 依赖包来构建项目(编译项目),抱歉:(不过有兴趣的朋友,吧上述的源码down 下来,里面

tomcat(17)启动tomcat

[0]README 1)本文部分文字描述转自"how tomcat works",旨在学习"tomcat(17)启动tomcat"的相关知识: 2)本文重点关注启动Tomcat时会用到的两个类,分别是Catalina类和 Bootstrap类:(干货--引入tomcat启动时用到了两个类,分别是Catalina类和 Bootstrap类) 2.1)org.apache.catalina.startup.Catalina类:用于启动和关闭Server对象,并负责解析T

tomcat(18)部署器

[0]README -1)先上干货:本文重点分析了tomcat 如何部署WAR文件的项目形式 以及 普通文件夹的项目形式:不管是WAR文件 还是 普通文件夹的项目形式,在tomcat中,它们都是Context容器:(Bingo) 0)本文部分文字描述转自"how tomcat works",旨在学习"tomcat(18)部署器"的相关知识: 1)intro:要使用一个web 应用程序,必须要将表示该应用程序的 Context实例部署到一个Host 实例中:(干货--

《how tomcat work》 搬运工 Chapter 15: Digester

在之前的章节都是通过Bootstrap类来初始化connector,context,wrapper. 而且手动来绑定它们的关系. connector.setContainer(context); 或者手动设置实例的属性 context.setPath("/myApp") ; context.setDocBase("myApp"); 在tomcat中,是用web.xml来设置的.而digester是一个开源的库,可以读取xml,通过xml来加载类,实例化. Diges