### Tomcat加载顺序详解 Apache Tomcat作为一款广泛使用的开源Servlet容器,其类加载机制是理解和维护基于Tomcat的应用程序的重要部分。Tomcat的类加载器遵循特定的加载顺序,确保了不同应用间的隔离性和资源的正确加载。下面将详细解析Tomcat的类加载过程及其顺序。 #### 1. Bootstrap ClassLoader 这是JVM自带的类加载器,用于加载核心的类库,如`java.lang`、`java.util`等,这些类库存储在`$JAVA_HOME/jre/lib`目录下。Bootstrap ClassLoader不会从磁盘上加载任何类,而是直接读取JRE中的这些核心类库。 #### 2. System ClassLoader System ClassLoader通常被称为应用程序类加载器,它会从`CLASSPATH`环境变量指定的路径加载类库,以及`$CATALINA_HOME/common/classes`、`$CATALINA_HOME/common/lib`下的类和jar包。这里的类库可以被所有web应用共享访问。 #### 3. Common ClassLoader Common ClassLoader负责加载`$CATALINA_HOME/common/classes`、`$CATALINA_HOME/common/endorsed`和`$CATALINA_HOME/common/i18n`目录下的类库。endorsed目录主要用于存放标准API的扩展实现,i18n目录则存放国际化相关的资源。 #### 4. Server ClassLoader Server ClassLoader用于加载`$CATALINA_HOME/server/classes`和`$CATALINA_HOME/server/lib`目录下的类库。这些类库主要供Tomcat服务器自身使用,不包括web应用。 #### 5. Shared ClassLoader Shared ClassLoader负责加载`$CATALINA_BASE/shared/classes`和`$CATALINA_BASE/shared/lib`目录下的类库。与Common ClassLoader类似,但它的优先级更高,这意味着如果在两个目录下有同名的类,Shared ClassLoader加载的类将被优先考虑。 #### 6. WebApp ClassLoader WebApp ClassLoader是最底层的类加载器,它负责加载每个web应用的`WEB-INF/classes`目录和`WEB-INF/lib`目录下的类库。每个web应用都有一个独立的WebApp ClassLoader,这保证了不同应用之间的类隔离性。 #### 类加载顺序的重要性 理解Tomcat的类加载顺序对于避免类加载冲突至关重要。例如,在上述内容中提到了不同版本的`mail.jar`可能导致的`NoSuchProviderException`异常。这是因为Tomcat默认会按照上述顺序查找类,当多个目录下存在相同或相似的类时,加载顺序决定了最终加载哪个版本的类。因此,合理配置类路径,确保正确的加载顺序,是防止此类问题的关键。 #### 结论 Tomcat的类加载机制虽然复杂,但通过明确的加载顺序和层级关系,能够有效地管理各类资源,保障应用程序的正常运行。开发人员在部署和调试应用时,应充分了解这一机制,以便于解决可能出现的类加载冲突等问题。
1.最先是$JAVA_HOME/jre/lib/ext/下的jar文件。
2.环境变量CLASSPATH中的jar和class文件。
3.$CATALINA_HOME/common/classes下的class文件。
4.$CATALINA_HOME/commons/endorsed下的jar文件。
5.$CATALINA_HOME/commons/i18n下的jar文件。
6.$CATALINA_HOME/common/lib 下的jar文件。
(JDBC驱动之类的jar文件可以放在这里,这样就可以避免在server.xml配置好数据源却出现找不到JDBC Driver的情况。)
7.$CATALINA_HOME/server/classes下的class文件。
8.$CATALINA_HOME/server/lib/下的jar文件。
9.$CATALINA_BASE/shared/classes 下的class文件。
10.$CATALINA_BASE/shared/lib下的jar文件。
11.各自具体的webapp /WEB-INF/classes下的class文件。
12.各自具体的webapp /WEB-INF/lib下的jar文件。
class的搜寻顺序如下:
-------------
Bootstrap classes of your JVM
System class loader classses (described above)
- 粉丝: 0
- 资源: 5
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 数据中台(大数据平台)数据共享标准规范.pdf
- StratoVirt 基于Rust 编程语言 StratoVirt 轻量级、高效且安全 它还具有 Full Sence Support 和 Modules Flexible Splitting 等功能
- 微信小程序开发游戏2048
- Salvo 是一个极其简单易用却又功能强大的 Rust Web 后端框架
- 分支与循环(简单的语句)
- 智能车竞赛专题培训从设计理念到实际操作应用
- 数据中台(大数据平台)数据采集标准规范.pdf
- 数据中台(大数据平台)资源目录编制标准规范.pdf
- Charles 网络封包截取工具纯净版
- PHP语言基础知识详解及常见功能应用.docx