`
a3x60
  • 浏览: 7206 次
  • 性别: 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,除了首字母外,其他字母必须一致,不然在解析的时候会解析不到对应的属性值。不知道是否还有其他规则,没有摸清楚。
分享到:
评论

相关推荐

    Linux tomcat下catalina.out日志文件分割

    Linux tomcat下catalina.out日志文件分割 前言: tomcat默认使用Java.util.logging记录日志,默认只记录tomcat的日志,不记录应用的日志。tomcat支持采用log4j进行日志记录,配置方法如下: 1.更新最新的tomcat_juli...

    Tomcat源码研究

     /tomcat/conf/server.xml 第一行是以前默认存在的,第二行是新增的 <Context path="" docBase="ROOT" debug="0" reloadable="true"></Context> <Context path="/jsp/a" reloadable="true" docBase="E:\workplace\...

    基于tomcat配置文件server.xml详解

    该示例通过设置虚拟主机来提供web服务,因为是入门示例,所以设置极其简单,只需修改$CATALINA_HOME/conf/server.xml文件为如下内容即可。其中大部分都采用了默认设置,只是在engine容器中添加了两个Host容器。 &...

    apache-tomcat-9.0.27.rar

    入tomcat9的目录的conf,我这里的路径是D:\ProgramFiles\apache-tomcat-9.0.0.M26\conf, 选择“tomcat-users.xml”文件,打开文件后在最后 一行代码的前面添加如下代码: <role rolename="manager-gui"/> ...

    Linux系统Tomcat日志分割jar包及配置文件

    Linux Tomcat下使用Log4j接管catalina.out 日志文件生成方式,按天分割,解决catalina.out日志文件过大问题 1、将log4j-1.2.17.jar、tomcat-juli-adapters.jar两个jar包和log4j.properties文件拷贝到 Tomcat 的 lib...

    TOMCAT多站点配置.txt

    1 打开tomcat/conf/server.xml,在里面找到<Engine name="Catalina" defaultHost="localhost">.....</Engine> 2 在<Engine name="Catalina" defaultHost="localhost"></Engine>中间加入内容: <Engine name="...

    tomcat8用redis实现session共享.rar

    1、将 redisson.conf 拷贝到 ${catalina.base},修改redis配置(url、密码) 2、将redisson.yaml 拷贝... configPath="${catalina.base}/conf/redisson.yaml" closeMethod="shutdown"/> </GlobalNamingResources>

    tomcat禁用RC4的方法

    编缉$CATALINA_HOEM/conf/server.xml配置文件,找到https端口配置处,修改如下: 复制代码 <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" maxThreads="150" SSLEnabled="true" ...

    Linux下tomcat日志catalina.out按天(/周)分割

    针对linux环境上tomcat不断输出到catalina.out文件的问题,提供一个按天分割catalina.out的脚本,以及操作说明。绝对可用!

    Tomcat8 server.xml详尽且可直接使用配置,每个参数都进行了详细说明,按需要进行微调即可

    Tomcat8 server.xml详尽且可直接使用配置,每个参数都进行了详细说明,按需要进行微调即可,没有列出的参数通常采用默认值即可。形式如下: <!--Executor表示可以在Service中的组件之间共享的线程池。 name:线程池...

    Tomcat设置虚拟目录的方法, 不修改server.xml

    在tomcat文件夹的conf\Catalina\localhost(放在$CATALINA_HOME/conf/[enginename]/[hostname]/目录下面)增加szdj_file.xml文件(Catalina 是对应<Engine name="Catalina" defaultHost="localhost">,不区分大小写)

    tomcat 下catalina.out 日志乱码问题处理

    部署tomcat下的项目 监控的时候发现 日志中文乱码 ,tomcat 下catalina.out 日志乱码问题处理

    tomcat7优化版

    tomcat是经过优化配置的,下载根据自己内存大小好修改即可使用,下载后打(windows)开/bin/catalina.bat (linux)/bin/catalina.sh.../conf/server.xml 已配置三种模式(bio/nio/apr) 默认apr可根据自己需求切换注释。

    tomcat-redis-session-8.5.5.0

    通过插入以下行来配置全局上下文(CATALINA.HOME / conf / context.xml)或Web应用程序上下文(META-INF / context.xml),以使用Tomcat Redis Session Manager “ ru.zinin.redis.session.RedisManager ” /> ...

    在Apache Tomcat 7设置redis作为session store

    5.修改tomcat的conf下的context.xml文件,添加或者修改下面的配置 Java代码 收藏代码 <Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" /> <Manager className="com.radiadesign....

    tomcat-7.0.28

    tar zxvf apache-tomcat-7.0.28.tar.gz -C ../software/ cd ../software cp -rp apache-tomcat-7.0.28/ /usr/local/ cd /usr/local/apache-tomcat-7.0.28/ 设置环境变量 vi /etc/profile 加入如下两条 CATALINA_...

    Tomcat下的数据库连接

    Tomcat中配置JNDI DataSource 配置环境:Windows 2003+Tomcat +mysql 5+ecilpses 3.1 首先,将MYSQL的驱动放在$CATALINA_HOME/common/...其次,在$CATALINA_HOME/conf/server.xml文件的</Host>标签之前添加如下内容:

    Agilefant安装事项

    Tomcat配准,conf/tomcat-users.xml加入如下参数: <role rolename="manager-gui"/> <user username="admin" password="admin" roles="manager-gui"/> sudo /etc/init.d/tomcat7 restart ...

    Tomcat输出catalina.out的大小控制

    Tomcat输出catalina.out的大小控制

    cronolog-1.6.2.tar.gz

    修改tomcat bin目录下的catalina.sh文件中的 org.apache.catalina.startup.Bootstrap “$@” start \ >> “$CATALINA_BASE”/logs/catalina.out 2>&1 & 为 org.apache.catalina.startup.Bootstrap "$@" start 2...

Global site tag (gtag.js) - Google Analytics