`
a3x60
  • 浏览: 7529 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Tomcat源码的catalina中利用Digester解析conf/server.xml

阅读更多
最近在学习Tomcat的源码,在catalina. createStartDigester方法中,Tomcat开发人员采用了Digester来读取conf/server.xml文件,以前读取xml文件一般采用Dom4j和SAX。由于对Digester比较陌生,所以今天抽时间研究了一下Digester是如何解析xml文件的。先简单阐述下Dom4j和SAX解析XML的却别:
Dom4j是把一个xml文件全部读取到内存中,构建成一个DOM树来解析,所以Dom4j适合读取比较小的xml文件。
SAX是基于文件流来解析xml文件的,在读取xml文件流时,SAX会通过节点来触发相应的操作,也可以说SAX是基于文件流的事情触发机制来解析xml文件的。
Digeter是apache的common项目,作用是将XML转化成对象,使用者直接从对象中获取xml的节点信息。Digester是对SAX的包装,它也是基于文件流来解析xml文件,只不过这些解析操作对用户是透明的。Tomcat的配置文件conf/server.xml就是用Digester来读取的。
一、    下载Digester的jar
(1)      Digester的jar下载地址(版本:2.0)
http://commons.apache.org/digester/
(2)      Digester依赖的Logging的jar下载地址(版本:1.1.1)
http://commons.apache.org/logging/
(3)      Digester依赖的BeanUtils的jar下载地址(版本:1.8.3)
http://commons.apache.org/beanutils/
二、    关键方法说明
(1)    serverDigester.addObjectCreate("Server","com.test.server.digester.Server")
当解析xml文件时,遇到“Server”就初始化一个“com.test.server.digester.Server”对象,并且把该对象压入栈顶
(2)    serverDigester.addSetProperties("Server", "port", "port")
给Server对象注册port属性,当解析到Server节点的port属性时调用Server的setPort方法
(3)    serverDigester.addSetNext("Server/Listener", "addListener","com.test.server.digester.Listener")
当解析Server节点下的Listener节点的时候,调用Server对象的addListener方法,把当前Listener对象写入到Server对象中。无论Server节点下有多少个Listener节点,都会调用addListener方法
(4)    serverDigester.addCallMethod("Server/Service/Engine", "setEngine", 0)
Service中添加Engine,调用当前top object的setEngine函数,参数个数为0
addCallMethod与addBeanPropertySetter方法等价
三、    注意事项
Xml中定义的属性要与对象中set和get方法一致,比如xml中定义了一个节点属性“engineType”,那么在java对象的set方法必须为setEngineType,除了首字母外,其他字母必须一致,不然在解析的时候会解析不到对应的属性值。不知道是否还有其他规则,没有摸清楚。
分享到:
评论

相关推荐

    Tomcat源码研究.pdf

    首先,Tomcat会解析conf/server.xml文件,该文件中定义了所有容器组件的配置。脚本解析的过程涉及到几个关键类,如Digester,它负责将XML文件中的配置转换为内部的Java对象。了解Catalina的启动脚本解析,可以让我们...

    Tomcat 10.0.12的源码

    在`conf/web.xml`和`conf/server.xml`中可以配置这些安全设置。 **6. 异常处理与日志系统** Tomcat使用`org.apache.juli`包下的日志系统,如`LoggingManager`和`ClassLoaderLogManager`,来记录应用和服务器的运行...

    tomcat9.0源码

    `org.apache.tomcat.util.digester.Digester`类用于解析XML配置文件,如server.xml和context.xml,生成相应的Java对象并设置属性。 7. **JMX支持**: 通过Java Management Extensions (JMX),Tomcat提供了一种...

    apache-tomcat-6.0.33-src tomcat6.0.33源代码

    这些连接器在`conf/server.xml`配置文件中定义,源码中对应于`org.apache.coyote`包下的`Http11Protocol`类。 5. **会话管理**:Tomcat提供了对用户会话的支持,包括会话创建、跟踪和过期。`Session`接口和相关的...

    Struts实践入门(原创)

    - **XML Parser**:支持 JAXP 1.1 的 XML 解析器,推荐使用 jaxp-ri (http://java.sun.com/xml) 或 Xerces (http://xml.apache.org/xerces-j)。 - **Ant Build System**:版本 1.4 或更高版本 ...

    tomcat9.04

    6. **Webapps** 和 **Conf** 目录:虽然在源码包中可能没有预编译的Web应用程序,但通常Conf目录会包含Tomcat的配置文件,如server.xml、web.xml等,这些文件定义了服务器的设置和部署规则。 7. **Build** 和 **...

    Apache-Tomcat-9::nerd_face:Apache-Tomcat-9源代码-apache source code

    - `org.apache.tomcat.util.digester.Digester`:解析XML配置文件,如server.xml,将配置信息映射到对应的Java对象。 5. **线程模型**: - `org.apache.tomcat.util.net`:网络连接处理,如NioEndpoint或...

Global site tag (gtag.js) - Google Analytics