学习
实践
活动
工具
TVP
写文章

tomcat (2.5) Digester

参考 深入理解Tomcat(六)Digester组件 digester和rule 2. 是什么 它是用于解析xml文件的类库。 我们提到Digester其实有两种: tomat内嵌的org.apache.tomcat.util.digester.Digester maven依赖的digester。 将整个xml读取,解析,保存到内存,比如Dom4j 基于流进行分析,比如sax Digester是第二种,底层是基于sax的。 4. 4.2 addSetProperties digester.addSetProperties("School"); 这个比较好理解。 总结 Digester会用流的方式解析xml,并生成对应的对象。

24930

【Java】:Apache Commons Digester

The Object Stack One very common use of org.apache.commons.digester3.Digester technology is to dynamically Element Matching Patterns A primary feature of the org.apache.commons.digester3.Digester parser is that The Digester can be configured to use different pattern-matching algorithms via the Digester.setRules ("*/a", ruleA); digester.addRule("*/a", ruleB); digester.addRule("x/a", ruleA); digester.addRule static void main(String[] args) throws IOException, SAXException { Digester digester = new Digester

19520
  • 广告
    关闭

    热门业务场景教学

    个人网站、项目部署、开发环境、游戏服务器、图床、渲染训练等免费搭建教程,多款云服务器20元起。

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    tomcat源码解读一 Digester的解析方式

    1    Digester Digester在tomcat中的作用是对conf下的server.xml文件进行实例化,其是从Catalian这个组件开始,创建Digester实例,再添加对应的规则,然后将其实例化 其主要实现过程是创建Digester实例,设置规则 protected Digester createStartDigester() { long t1=System.currentTimeMillis (); //创建一个digester实例 Digesterdigester = new Digester(); //是否需要验证xml文档的合法性,false表示不需要进行DTD 规则校验 digester.setValidating(false); //是否需要进行节点设置规则校验 digester.setRulesValidation(true); } return (digester); } 1.3.2  注入栈顶对象 将当前catalina压入栈顶,stack 是一个ArrayStack实例 digester.push(this

    96890

    探秘Tomcat——启动篇

    - it may be needed initNaming(); // Create and execute our Digester Digester 通过digester.parse(inputSource)解析server.xml中的元素 protected Digester createStartDigester() { long t1=System.currentTimeMillis(); // Initialize the digester Digester digester = new Digester (); digester.setValidating(false); digester.setRulesValidation(true); HashMap Server/Service/")); digester.addRuleSet(new HostRuleSet("Server/Service/Engine/")); digester.addRuleSet

    67370

    tomcat-整启动流程-源码解析

    - it may be needed initNaming(); // Create and execute our Digester Digester digester = Digester digester = new Digester(); //解析器标志为false digester.setValidating(false); //执行标记为成 digester.setRulesValidation(true); //用于存放对象信息 其中包含 类名 来源 端口编移配置 Map<Class<? ", "className"); digester.addSetProperties("Server"); digester.addSetNext /Service/")); digester.addRuleSet(new HostRuleSet("Server/Service/Engine/")); digester.addRuleSet

    6820

    搞懂 XML 解析,徒手造 WEB 框架

    digester 是采用 SAX 来解析 XML 文件,在 Tomcat 中就用 Digester 来解析配置,在 Struts 等很多开源项目,也都用到了 digester 来解析配置文件,在实际项目研发中 digester 的用法 弱弱问一句:有没有听过 digester,若没有听过,那势必要好好读本文啦。 定义解析规则文件 rule.xml digester 进行解析 xml,需要依赖解析规则(就是告诉 digester 怎么个解析法)。 package org.yyxj.miniframework.config; import org.apache.commons.digester.Digester; import org.apache.commons.digester.xmlrules.DigesterLoader 答疑解谜 本次主要聊了聊 xml 解析的方式,着重分享了 digester 的用法,并站在 digester 解析 xml 的基础之上,徒手模拟了一个 WEB 的迷你版的框架。

    23320

    tomcat-超详细的启动流程(init)

    /** * 解析server.xml */ protected Digester createStartDigester() { long t1=System.currentTimeMillis (); // Initialize the digester Digester digester = new Digester(); digester.setValidating (false); digester.setRulesValidation(true); Map<Class<? , "className"); digester.addSetProperties("Server"); digester.addSetNext("Server ", "className"); digester.addSetProperties("Server/Service/Executor"); digester.addSetNext

    87010

    tomcat学习|server.xml解析并初始化servlet容器

    // Before digester - it may be needed initNaming(); // Create and execute our Digester // 在createStartDigester里面配置server.xml的格式以及解析规则 Digester digester = createStartDigester(); System.nanoTime(); // 这个方法是和操作系统相关,对应着我们现实生活的时间 long t1=System.currentTimeMillis(); 通过寻找熟悉的元素,我们发现,digester digester.addObjectCreate("Server", "org.apache.catalina.core.StandardServer digester.parse(inputSource); 今天的server.xml解析并初始化servlet容器 过种就结束啦 最后说两句 前面这些过程以解析和生成对应对象设置环境为主, 后面就真正进入的

    31120

    tomcat学习|Tomcat应用各个组件的默认值

    开头说两句 小刀博客: https://www.lixiang.red 小刀公众号: 程序员学习大本营 学习背景 上一波,我们一起学习了digester进行servlet.xml的解析和servlet容器的初始化 对每个Context都会去新建一个WebappLoader , 所以说,tomcat中的web应用都是单独的类加载器. digester.addObjectCreate(prefix + "Context new SetParentClassLoaderRule(parentClassLoader)); addClusterRuleSet(digester , "Server/Service/Engine/Cluster/"); SetParentClassLoaderRule: 会取出digester当前栈顶的元素,并为栈顶的元素设置类加载器 Container top = (Container) digester.peek(); top.setParentClassLoader(parentClassLoader); 其中的parentClassLoader

    32920

    Java生成十六进制的MD5加密字符串

    ; static { try { digester = MessageDigest.getInstance("MD5"); }catch * @return 返回md5加密后的十六进制字符串 */ public static String encrypt(String str) { if (digester str == null || str.length() == 0) { return null; } synchronized (digester ){ try { digester.update(str.getBytes("UTF-8")); String s1 = new BigInteger(1, digester.digest()).toString(16); //补齐BigInteger省略的前置0

    1.6K30

    tomcat启动分析(3)catalinaload和start

    Digester Digester教程 load initDirs 该方法是用来确保一些与路径相关的环境变量已经设置。 initNaming 一堆环境变量的设置 剩余部分 打开配置文件流: 中间大部分代码都是试图打开conf/server.xml,如果没有,则试图打开server-embed.xml的读入流 用digester 解析输入流: inputSource.setByteStream(inputStream); digester.push(this); digester.parse(inputSource); 设置双向引用 : getServer().setCatalina(this); 其中getServer()返回的server成员变量,在之前用Digester解析 已经生成 重置输入流initStreams 调用

    28740

    CodeQL进行JAVA代码审计(1) --- XXE漏洞的挖掘

    digester = new Digester(); digester.parse(new StringReader(body)); // parse xml } catch xxe vuln code"; } 修复方式 @RequestMapping(value = "/Digester/sec", method = RequestMethod.POST) public digester = new Digester(); digester.setFeature("http://apache.org/xml/features/disallow-doctype-decl ", true); digester.setFeature("http://xml.org/sax/features/external-general-entities", false) digester.parse(new StringReader(body)); // parse xml return "Digester xxe security code";

    2.3K101

    java 处理xml的三种技术

    Digester 解析 XML 为了满足将 XML 转换为 JavaBean 的特殊需求,Apache 旗下的一个名为 Digester 的工具为我们提供了这么一个选择。 下面是一个 Digester 解析 XML 的例子片段: 清单 4. Digester 解析 XML // 定义要解析的 XML 的路径,并初始化工具类 File input = new File("books.xml"); Digester digester = new Digester(); // 如果碰到了 <books> 这个标签,应该初始化 test.myBean.Books 这个 JavaBean 并填装相关内容 digester.addObjectCreate test.myBean.Book 这个 JavaBean digester.addObjectCreate("books/book", "test.myBean.Book"); digester.addSetProperties

    58960

    探秘Tomcat——连接篇

    ", "className"); digester.addSetProperties("Server"); digester.addSetNext("Server in the element "className"); digester.addSetProperties("Server/Listener"); ", "className"); digester.addSetProperties("Server/Service"); digester.addSetNext 我们从Catalina的load方法开始,当执行到load中的digester.parse(inputSource)时,即跳转到Digester类的parse方法中,之后开始解析server.xml中依次遇到的各个元素 当遇到server元素的时候,在代码中方法的执行顺序为Catalina.load->Digester.parse->Digester.startElement   startElement方法如下:

    45390

    Error filterStart startup failed due to previous errors

    : http://jakarta.apache.org]] log4j:WARN No appenders could be found for logger (org.apache.commons.digester.Digester.sax SessionListener: contextInitialized() log4j:WARN No appenders could be found for logger (org.apache.commons.digester.Digester.sax log4j:WARN No appenders could be found for logger (org.apache.commons.digester.Digester.sax). log4j:WARN

    8120

    Go语言并发模型:以并行处理MD5为例

    ,每个 digester 从 paths channel 读取文件名,并将结果发送给 c。 代码如下: func digester(done <-chan struct{}, paths <-chan string, c chan<- result) { for path := range 没有关闭输出 channel c,因为 多个 digester 在共享这个channel。 关闭操作放到 MD5All 中实现,当所有 digester 运行结束时,MD5All 关闭这个channel。 20 wg.Add(numDigesters) for i := 0; i < numDigesters; i++ { go func() { digester

    1.3K60

    Tomcat源码篇-启动核心流程-没你想的那么难哦

    return; // 只能被加载一次 } loaded = true; initDirs(); // 废弃的方法 // Before digester - it may be needed initNaming(); // 和JNDI 相关的内容 忽略 // Create and execute our Digester // 创建并且执行我们的 Digester 对象 Server.xml Digester digester = createStartDigester(); // 省略掉了 Digester文件处理的代码 getServer().setCatalina(this); // Server对象绑定 Catalina对象 getServer 通过Apache下的Digester组件完成了Server.xml文件的解析 通过getServer().init() 方法完成了Server,Service,Engin,Connector等核心组件的初始化操作

    10220

    springboot jasypt加密_java打包加密

    Creating encryptors and digesters Creating encryptor and digester artifacts with the encryption namespace There's a tag for each type of encryptor/digester (including some util classes), and each tags is able -- Registers an org.jasypt.digest.StringDigester--> <encryption:string-digester pool-size="10"/> Again Let's see some examples: <encryption:digester-config id="dConf1" iterations="1400" salt-size-bytes id="dConf" string-output-type="hexa" algorithm-env-name="VAR_ALGORITHM"/> <encryption:string-digester

    5010

    使用HiCUP进行Hi-C数据预处理

    准备参考基因组酶切位点图谱 采用hicup_digester这个脚本来创建基因组的酶切图谱,基本用法如下 hicup_digester \ --re1 A^AGCTT,HindIII \ --genome hg19_digester_db \ hg19.fa 根据限制性内切酶识别的位点,将基因组序列进行模拟酶切,得到所有可能的酶切片段。 最终输出的文件名示例如下 Digest_hg19_digester_db_HindIII_None_09-46-07_17-05-2019.txt 3. /scratch/Genomes/Human/GRCh38/Homo_sapiens.GRCh38 #Path to the genome digest file produced by hicup_digester

    1K30

    tomcat源码解读二 tomcat的生命周期

    根据digester构建规则然后在解析server.xml文件的时候根据Host标签解析对应的StandardHost实例,并给其添加规则LifecycleListenerRule,这个规则的作用就是StandardHost 是实例化后会调用addLifecycleListenerHostConfig实例添加到其LifecycleSupport句柄,具体代码执行如下: HostRuleSet.java digester.addObjectCreate (prefix + "Host"); digester.addRule(prefix + "Host", new CopyParentClassLoaderRule() ", "hostConfigClass")); digester.addSetNext(prefix + "Host", "addChild String name, Attributes attributes) throws Exception { //获取元素 Container c =(Container) digester.peek

    64560

    扫码关注腾讯云开发者

    领取腾讯云代金券