Tomcat源码解读--代码走读之(二十四中的2-3-1)Valve.start(二十五)

本文主要是介绍Tomcat源码解读--代码走读之(二十四中的2-3-1)Valve.start(二十五),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、AccessLogValve.start,类关系是:classAccessLogValve extends ValveBase implements AccessLog,abstractclass ValveBase extends LifecycleMBeanBase implements Contained, Valve

(1)、调用LifecycleBase的start()方法。

    1)、init方法

        1))、setStateInternal(LifecycleState.INITIALIZING,null, false);因为AccessLogValve的ls的listeners为0,所以没有方法执行。

        2))、initInternal(),首先是调用ValveBase的initInternal(),调用super(LifecycleMBeanBase)的initInternal(),注册mbean。



 

       3))、setStateInternal(LifecycleState.INITIALIZED,null, false); 因为AccessLogValve的ls的listeners为0,所以没有方法执行。

    2)、setStateInternal(LifecycleState.STARTING_PREP, null, false); 因为AccessLogValve的ls的listeners为0,所以没有方法执行。

    3)、startInternal();调用AccessLogValve的startInternal()方法



 

        1))、设置时间的格式

        2))、open()方法。



 

                   1)))、File dir 为D:\workspace\test_tomcat\apache-tomcat-7.0.22-src\output\build\logs

                   2)))、Filepathname;为D:\workspace\test_tomcat\apache-tomcat-7.0.22-src\output\build\logs\localhost_access_log.2012-09-11.txt

                  3)))、设置Charset charset为gbk

                  4)))、定义PrintWriter writer和File currentLogFile

         3))、setState(LifecycleState.STARTING);因为AccessLogValve的ls的listeners为0,所以没有方法执行。

    4)、setStateInternal(LifecycleState.STARTED,null, false); 因为AccessLogValve的ls的listeners为0,所以没有方法执行。

2、ErrorReportValve.start(),类关系是,ErrorReportValve extends ValveBase,ValveBase extendsLifecycleMBeanBase implements Contained, Valve

(1)、调用LifecycleBase的start()方法。

    1)、init方法

        1))、setStateInternal(LifecycleState.INITIALIZING,null, false);因为ErrorReportValve的ls的listeners为0,所以没有方法执行。

        2))、initInternal(),首先是调用ValveBase的initInternal(),调用super(LifecycleMBeanBase)的initInternal(),注册mbean。



  
       3))、setStateInternal(LifecycleState.INITIALIZED,null, false); 因为ErrorReportValve的ls的listeners为0,所以没有方法执行。

    2)、setStateInternal(LifecycleState.STARTING_PREP, null, false); 因为ErrorReportValve的ls的listeners为0,所以没有方法执行。

    3)、startInternal();调用ValvBasee的startInternal()方法,因为ErrorReportValve的ls的listeners为0,所以没有方法执行。



 

    4)、setStateInternal(LifecycleState.STARTED, null, false); 因为ErrorReportValve的ls的listeners为0,所以没有方法执行。

3、StandardHostValve.start(),类关系是,StandardHostValve extends ValveBase,ValveBase extends LifecycleMBeanBase implements Contained, Valve

(1)、调用LifecycleBase的start()方法。

    1)、init方法

        1))、setStateInternal(LifecycleState.INITIALIZING,null, false);因为StandardHostValve的ls的listeners为0,所以没有方法执行。

        2))、initInternal(),首先是调用ValveBase的initInternal(),调用super(LifecycleMBeanBase)的initInternal(),注册mbean。



 

        3))、setStateInternal(LifecycleState.INITIALIZED,null, false); 因为StandardHostValve的ls的listeners为0,所以没有方法执行。

    2)、setStateInternal(LifecycleState.STARTING_PREP, null, false); 因为StandardHostValve的ls的listeners为0,所以没有方法执行。

    3)、startInternal();调用ValvBasee的startInternal()方法,因为StandardHostValve的ls的listeners为0,所以没有方法执行。



 

    4)、setStateInternal(LifecycleState.STARTED,null, false); 因为StandardHostValve的ls的listeners为0,所以没有方法执行。

这篇关于Tomcat源码解读--代码走读之(二十四中的2-3-1)Valve.start(二十五)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/403624

相关文章

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

MCU7.keil中build产生的hex文件解读

1.hex文件大致解读 闲来无事,查看了MCU6.用keil新建项目的hex文件 用FlexHex打开 给我的第一印象是:经过软件的解释之后,发现这些数据排列地十分整齐 :02000F0080FE71:03000000020003F8:0C000300787FE4F6D8FD75810702000F3D:00000001FF 把解释后的数据当作十六进制来观察 1.每一行数据

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

工厂ERP管理系统实现源码(JAVA)

工厂进销存管理系统是一个集采购管理、仓库管理、生产管理和销售管理于一体的综合解决方案。该系统旨在帮助企业优化流程、提高效率、降低成本,并实时掌握各环节的运营状况。 在采购管理方面,系统能够处理采购订单、供应商管理和采购入库等流程,确保采购过程的透明和高效。仓库管理方面,实现库存的精准管理,包括入库、出库、盘点等操作,确保库存数据的准确性和实时性。 生产管理模块则涵盖了生产计划制定、物料需求计划、

代码随想录冲冲冲 Day39 动态规划Part7

198. 打家劫舍 dp数组的意义是在第i位的时候偷的最大钱数是多少 如果nums的size为0 总价值当然就是0 如果nums的size为1 总价值是nums[0] 遍历顺序就是从小到大遍历 之后是递推公式 对于dp[i]的最大价值来说有两种可能 1.偷第i个 那么最大价值就是dp[i-2]+nums[i] 2.不偷第i个 那么价值就是dp[i-1] 之后取这两个的最大值就是d

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip