码迷,mamicode.com
首页 > 其他好文 > 详细

Digester库

时间:2018-12-21 22:59:31      阅读:379      评论:0      收藏:0      [点我收藏+]

标签:api   相同   pat   listener   listen   因此   学习   ase   site   

  在之前所学习关于启动简单的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文档中根元素的模式与元素的名字相同。

 

Digester库

标签:api   相同   pat   listener   listen   因此   学习   ase   site   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!