12|Pipeline与Valve:如何实现容器间的调用、事务管理、权限验证?
项目结构
- 深入了解
- 翻译
- 解释
- 总结
本文深入介绍了在MiniTomcat中实现容器间的调用、事务管理和权限验证的方法。作者首先介绍了项目结构,并新增了Logger、Pipeline、Valve、ValveContext接口等多个Java文件。在项目结构的基础上,作者讲解了日志组件的定义以及职责链模式在Tomcat中的应用。通过职责链模式,服务器可以经过多个Container层层调用具体的Servlet。文章内容涉及技术性较强,适合对Java开发和服务器管理有一定了解的读者阅读。 在文章中,作者详细介绍了日志组件的定义,包括Logger接口的定义和Container接口中与Logger相关的Getter和Setter方法定义。此外,还介绍了LoggerBase抽象实现类和StringManager工具类的定义,以及Constants常量类、SystemErrLogger标准错误日志类和SystemOutLogger标准输出日志类的定义。作者还详细讲解了FileLogger实现类的属性和方法,以及在BootStrap中创建Logger并指派给Container使用的过程。 最后,文章还介绍了在ContainerBase、StandardContext和HttpConnector中增加与日志相关的代码,以及如何在MiniTomcat中实现容器间的调用、事务管理和权限验证。整篇文章内容丰富,涵盖了日志组件的定义和实现,以及在MiniTomcat中的具体应用,对于想要深入了解MiniTomcat内部实现的读者来说,是一篇值得阅读的文章。
《手把手带你写一个 MiniTomcat》,新⼈⾸单¥59
全部留言(2)
- 最新
- 精选
- peter请教老师几个问题: Q1:Logger接口定义中FATAL 为什么用 Integer.MIN_VALUE? 用0不就可以了吗? Q2:“后端”是指什么? “存在 Exception 异常时,后端会调用 printStackTrace 抛出异常”这句话中用到的“后端”是指什么?有“后端”就有“前端”,“前端”和“后端”分别指什么? Q3:为什么先调用next再调用自身业务? AccessLogValve的invoke方法中,先调用context中的invokeNext,实现职责链调用,再调用自己的业务。那就是先处理下一个,再处理自己,如此迭代下去,变成倒序了,类似于堆栈了。假设有3个业务,先到业务1,业务1调用业务2,业务2调用业务3,;业务3处理完以后再处理业务2,最后处理业务1。为什么这样设计? Q4:Tomcat中的日志处理有什么特别之处?
作者回复: Q1,一般能用常量就不要用魔法值 Q2,我说后端指两种,一个是web系统中的服务器端,还有一种是指调用的下层,比如controller这一层,用到了service,则会把service堪称controller的后端 Q3,先用next是模仿的Tomcat Q4,没什么特别的,就是比较系统,按照日期区分,按照不同的container分开,access也分开的,比较有层次
2024-01-04归属地:北京1 - HH🐷🐠个人理解是 Valve 先添加先执行,可以当做为 Filter,在 Servlet 前面拦截先执行; Basic 属于自身业务最后执行, 可以当做 Servlet。
作者回复: 概念是对的。你再注意一下几个valve之间的先后次序。
2024-01-03归属地:广东2