### 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币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 住家保姆的工作职责、照顾老人住家保姆服务内容.docx
- 遵守交通规则中班教案.docx
- 《高温中暑事件卫生》一级(红色),二级(橙色),三级(黄色),四级(蓝色).docx
- 办公用品采购申请表(表格模板).docx
- 帮扶车间资金补贴申请表.docx
- 保障性安居工程考评内容和评价标准.docx
- 本级项目申请书(表格模板).docx
- 残疾儿童基本康复服务标准表.docx
- 残疾儿童定点康复机构综合评估标准表.docx
- 柴油货车报废补贴标准表.docx
- 常备借贷便利系统应急服务申请表.docx
- 产品生产过程质量问题表.docx
- 产品退货情况表.docx
- 城市快速路、主干路、重型车道典型路面、次干路、支路、非机动车专用道典型路面结构表.docx
- 城市社区工作者岗位一览表.docx
- 城乡环境基础设施建设考评内容和评分标准表.docx