JVM17_Tomcat打破双亲委派机制、执行顺序、底层代码原理、Tomcat|JDBC破坏双亲委派机制带来的面试题(一)

简介: ①. Tomcat类加载机制②. Tomcat执行顺序

①. Tomcat类加载机制


①. 可以看到,在原来的 JVM 的类加载机制上面,Tomcat 新增了几个类加载器,包括 3 个基础类加载器和每个 Web 应用的类加载器。3个基础类加载器在 conf/catalina.properties 中进行配置:


common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.home}/lib","${catalina.home}/lib/*.jar"
server.loader=
shared.loader=


②.Common:以应用类加载器为父类,是Tomcat顶层的公用类加载器,其路径由conf/catalina.pr operties中的common.loader指定,默认指向${catalina.home}/lib下的包


③. Catalina:Tomcat容器私有的类加载器,加载路径中的class对于Webapp不 可见,其路径由server.loader指定,默认为空,此时Tomcat使用Common类加载器加载应用服务器


④. Shared:以Common类加载器为父类,是所有Web应用的父类加载器,其路径由shared.loader指定,默认为空,此时Tomcat使用Common类加载器作为Web应用的父加载器


⑤. Web应用:以Shared类加载器为父类,加载/WEB-INF/classes目录下的未压缩的Class和资源文件以及/WEB-INF/lib目录下的jar包,该类加载器只对当前Web应用可见,对其他Web应用均不可见


⑥. Tomcat8 和 Tomcat6比较大的区别是:


Tomcat8可以通过配置 <Loader delegate="true"/>表示遵循双亲委派机制


微信图片_20220107154002.png


②. Tomcat执行顺序


①. 使用bootstrap引导类加载器加载


②. 使用system系统类加载器加载


③. 使用应用类加载器在WEB-INF/classes中加载


④. 使用应用类加载器在WEB-INF/lib中加载


⑤. 使用common类加载器在CATALINA_HOME/lib中加载


⑥.我们已经知道了tomcat为什么要这么设计,以及是如何设计的,那么,tomcat违背了java推荐的双亲委派模型了吗?答案是:违背了。我们前面说过:双亲委派模型要求除了顶层的启动类加载器之外,其余的类加载器都应当由自己的父类加载器加载。


很显然,tomcat不是这样实现,tomcat为了实现隔离性,没有遵守这个约定,每个webappClassLoad er加载自己的目录下的class文件,不会传递给父类加载器。


微信图片_20220107154030.png




相关文章
|
5月前
|
Java 编译器 C++
【Java基础面试一】、为什么Java代码可以实现一次编写、到处运行?
这篇文章解释了Java能够实现“一次编写,到处运行”的原因,主要归功于Java虚拟机(JVM),它能够在不同平台上将Java源代码编译成的字节码转换成对应平台的机器码,实现跨平台运行。
【Java基础面试一】、为什么Java代码可以实现一次编写、到处运行?
|
8月前
|
Java 关系型数据库 MySQL
【JVM】JDBC案例打破双亲委派机制
【JVM】JDBC案例打破双亲委派机制
186 4
|
3月前
|
前端开发 Java 应用服务中间件
21张图解析Tomcat运行原理与架构全貌
【10月更文挑战第2天】本文通过21张图详细解析了Tomcat的运行原理与架构。Tomcat作为Java Web开发中最流行的Web服务器之一,其架构设计精妙。文章首先介绍了Tomcat的基本组件:Connector(连接器)负责网络通信,Container(容器)处理业务逻辑。连接器内部包括EndPoint、Processor和Adapter等组件,分别处理通信、协议解析和请求封装。容器采用多级结构(Engine、Host、Context、Wrapper),并通过Mapper组件进行请求路由。文章还探讨了Tomcat的生命周期管理、启动与停止机制,并通过源码分析展示了请求处理流程。
|
3月前
|
负载均衡 应用服务中间件 Apache
Tomcat负载均衡原理详解及配置Apache2.2.22+Tomcat7
Tomcat负载均衡原理详解及配置Apache2.2.22+Tomcat7
70 3
|
4月前
|
Java 应用服务中间件 Apache
深入理解Tomcat---面试中常见的概念
【9月更文挑战第5天】Tomcat,作为Apache软件基金会下的一个开源项目,是Java Servlet和JavaServer Pages (JSP) 技术的实现,也是部署Java Web应用的首选服务器之一。
63 15
|
5月前
|
存储 缓存 Java
面试问Spring循环依赖?今天通过代码调试让你记住
该文章讨论了Spring框架中循环依赖的概念,并通过代码示例帮助读者理解这一概念。
面试问Spring循环依赖?今天通过代码调试让你记住
|
5月前
|
JavaScript 前端开发 程序员
JS小白请看!一招让你的面试成功率大大提高——规范代码
JS小白请看!一招让你的面试成功率大大提高——规范代码
|
6月前
|
前端开发 Java 应用服务中间件
Tomcat 与 JVM 中classpath的理解和设置总结
Tomcat 与 JVM 中classpath的理解和设置总结
277 0
|
8月前
|
数据采集 数据挖掘 Python
最全妙不可言。写出优雅的 Python 代码的七条重要技巧,2024年最新被面试官怼了还有戏吗
最全妙不可言。写出优雅的 Python 代码的七条重要技巧,2024年最新被面试官怼了还有戏吗
|
8月前
|
数据采集 XML 程序员
最新用Python做垃圾分类_python垃圾分类代码用key和format,5年经验Python程序员面试27天
最新用Python做垃圾分类_python垃圾分类代码用key和format,5年经验Python程序员面试27天
最新用Python做垃圾分类_python垃圾分类代码用key和format,5年经验Python程序员面试27天