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

相关文章

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

Spring Boot 3.4.3 基于 Spring WebFlux 实现 SSE 功能(代码示例)

《SpringBoot3.4.3基于SpringWebFlux实现SSE功能(代码示例)》SpringBoot3.4.3结合SpringWebFlux实现SSE功能,为实时数据推送提供... 目录1. SSE 简介1.1 什么是 SSE?1.2 SSE 的优点1.3 适用场景2. Spring WebFlu

Tomcat版本与Java版本的关系及说明

《Tomcat版本与Java版本的关系及说明》:本文主要介绍Tomcat版本与Java版本的关系及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat版本与Java版本的关系Tomcat历史版本对应的Java版本Tomcat支持哪些版本的pythonJ

java之Objects.nonNull用法代码解读

《java之Objects.nonNull用法代码解读》:本文主要介绍java之Objects.nonNull用法代码,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录Java之Objects.nonwww.chinasem.cnNull用法代码Objects.nonN

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很