摘自:http://www.blogjava.net/freeman1984/archive/2009/11/02/300717.html
Tomcat Server在启动的时候将构造一个ClassLoader树,以保证模块的类库是私有的
Tomcat Server的ClassLoader结构如下:
---------------------------+
| Bootstrap |
| | |
| System |
| | |
| Common |
| / \ |
| Catalina Shared |
| / \ |
| WebApp1 WebApp2 |
---------------------------+
其中:
- Bootstrap - 载入JVM自带的类和$JAVA_HOME/jre/lib/ext/*.jar
- System - 载入$CLASSPATH/*.class
- Common - 载入$CATALINA_HOME/common/...,它们对TOMCAT和所有的WEB APP都可见
- Catalina - 载入$CATALINA_HOME/server/...,它们仅对TOMCAT可见,对所有的WEB APP都不可见
- Shared - 载入$CATALINA_HOME/shared/...,它们仅对所有WEB APP可见,对TOMCAT不可见(也不必见)
- WebApp? - 载入ContextBase?/WEB-INF/...,它们仅对该WEB APP可见
ClassLoader被组织成树形,一般的工作原理是:
1) 线程需要用到某个类,于是contextClassLoader被请求来载入该类
2) contextClassLoader请求它的父ClassLoader来完成该载入请求
3) 如果父ClassLoader无法载入类,则contextClassLoader试图自己来载入
注意:WebApp?ClassLoader的工作原理和上述有少许不同:
它先试图自己载入类(在ContextBase?/WEB-INF/...中载入类),如果无法载入,再请求父ClassLoader完成
分享到:
相关推荐
- **容器管理**:如Docker容器化部署,可以在云环境中快速部署和扩展Tomcat服务。 #### 四、Tomcat性能优化 - **JVM调优**:通过调整JVM参数,如-Xms、-Xmx、-XX:+UseConcMarkSweepGC等,以提升应用程序的性能。 -...
如果父类加载器无法加载(例如Bootstrap ClassLoader无法加载非核心类),则子加载器才会尝试自己加载。这种方式确保了核心类库的安全性,避免了类的重复加载。 #### 二、类加载器的深入理解 **2.1 类加载器的作用...
以上内容是Java高级工程师面试中常见的知识点,包括JVM加载Class的原理、类加载器的角色以及Tomcat的类加载机制。理解这些内容对于深入理解Java应用程序的运行机制以及解决相关问题至关重要。在面试中,展示对这些...
描述中提到的“server.xml”是Liberty核心配置文件,类似于Tomcat中的server.xml文件,它负责定义和控制Liberty服务器运行的各种参数。该配置文件通常位于Liberty安装目录下的“config”子目录中。在server.xml中,...
- **子窗口滚动内容**:处理子窗口中的滚动条。 - **模态窗口**:创建阻止用户与其他部分交互的窗口。 ##### 4.4 使用监听器处理事件 - **事件处理**:使用监听器来响应用户事件和其他触发条件。 ##### 4.5 引用...
- **JVM** 通过 `ClassLoader` 来加载类,主要包括 `Bootstrap ClassLoader`、`Extension ClassLoader` 和 `Application ClassLoader`。 ### 24. 线程模型与线程安全 - **线程模型** 有两种:通过继承 `Thread` 类...
但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地...
- **Bootstrap ClassLoader**(启动类加载器): 负责加载`JAVA_HOME/lib/rt.jar`中的类库。 - **Extension ClassLoader**(扩展类加载器): 负责加载`JAVA_HOME/lib/ext`目录中的jar包。 - **Application ClassLoader...
- **功能模块**:负责营业后台模块中的批量处理子模块开发,包括接口设计、功能优化、bug修复等。 - **系统运维**:参与系统运维技术支撑工作,包括订单数据的转储、脚本编写、外围系统对接等。 2. **中国电信数据...
Java中有多种类加载器,包括Bootstrap ClassLoader、Extension ClassLoader和App ClassLoader。实现自定义类加载器可以帮助解决特定问题,比如动态加载类、实现安全控制等。 #### 解释一下什么叫AOP(面向切面编程...
- **具体实现:** `List`、`Set`、`Queue`是`Collection`的子接口;`HashMap`、`TreeMap`等是`Map`的实现类。 - **元素存储:** 集合通常存储的是对象引用,而不是基本类型值。 6. **文件和目录I/O:** - **读取...