官方原文: http://tomcat.apache.org/tomcat-5.5-doc/class-loader-howto.html
当Tomcat5启动以后,它创建一系列类加载器。这些类加载器以父子关系组织在一起,父类加载器在子类加载器的上面:
Bootstrap
|
System
|
Common
/ \
Catalina Shared
/ \
Webapp1 Webapp2 ... ( tomact classloader类层次结构)
Bootstrap - 这个类加载器可以加载Java虚拟机的运行时基础类,以及在系统扩展目录($JAVA_HOME/jre/lib/ext)中的所有Jar包中的类。
System - 这个类加载器一般可以加载CLASSPATH环境变量的内容。所有加载的类对于Tomcat内部的类和web应用程序的都是可见的。尽管如此,标准的Tomcat5启动脚本($CATALINA_HOME/bin/catalina.sh 或 %CATALINA_HOME%\bin\catalina.bat)会优先加载如下JAR包:
$CATALINA_HOME/bin/bootstrap.jar - 包含Tomcat5 服务器初始化的main()方法,以及所需的类加载器的实现类。
$JAVA_HOME/lib/tools.jar - 包括把JSP页面编译成Serlet类所需的"javac"编译器.
$CATALINA_HOME/bin/commons-logging-api.jar - Jakarta commons logging API.
$CATALINA_HOME/bin/commons-daemon.jar - Jakarta commons daemon API.
jmx.jar - The JMX 1.2 实现.
Common - 这个类加载器所加载的类对于Tomcat和web应用程序均可见。$CATALINA_HOME/common/classes目录下放置未打包的类和资源,commons/endorsed、commons/i18n、common/lib目录下的Jar包中的类和资源都是这个类加载器的加载对象。tomact安装后默认包括如下内容:
commons-el.jar - Jakarta commons el, Jasper用的EL表达式实现
jasper-compiler.jar - The JSP 2.0 编译器.
jasper-compiler-jdt.jar - The Eclipse JDT Java 编译器.
jasper-runtime.jar - The JSP 2.0 运行库.
jsp-api.jar - The JSP 2.0 API.
naming-common.jar - Tomcat5的JNDI 实现,用于内存命名环境
naming-factory.jar - Tomcat5的JNDI 实现,用于企业级资源引用(EJB, connection pools).
naming-factory-dbcp.jar - Jakarta commons DBCP, 为Web应用程序提供JDBC连接池。这个类已经从默认的org.apache.commons包中移出。
naming-java.jar - java命名空间处理器.
naming-resources.jar - The specialized JNDI naming context implementation used to represent the static resources of a web application. This is not related to the support of the J2EE ENC, and cannot be removed.
servlet-api.jar - The Servlet 2.4 API.
tomcat-i18n-**.jar - Optional JARs containing resource bundles for other languages. As default bundles are also included in each individual JAR, they can be safely removed if no internationalization of messages is needed.
Catalina - 这个类加载器主要加载Tomcat5自身所需要的类和资源。这些类和资源对于Web应用程序是完全不可见的。在$CATALINA_HOME/server/classes或者 /server/lib/ 。默认情况,包括个如下内容:
catalina.jar - Tomcat5中Catalina Servlet容器的实现部分。
catalina-ant.jar - 在管理web应用程序时要用倒的一些Ant任务。
catalina-optional.jar - 一些Catalina可选组件。
commons-modeler.jar - Tomcat通过JMX暴露其内部对象是用的一些MBean实现。
servlets-xxxxx.jar - 这些类同内部的Servlet一起提供Tomcat的部分功能,它们都是独立的,所以如果不需要相应的服务可以将其删除。或者它们可以从属于特定的安全管理器。
tomcat-coyote.jar - Coyote API.。
tomcat-http.jar - 标准的Java HTTP/1.1 连接器.。
tomcat-ajp.jar - AJP web 服务器的连接器,一般用于Apache,iPlanet iAS和 iWS.。
tomcat-util.jar - Tomcat连接器需要的工具类。
Shared - 这个类加载器用于把一些类和资源共享给所有的web应用程序。可放置在$CATALINA_BASE/shared/classes或者 /shared/lib。
WebappX - 系统会为部署在一个Tomcat实例中的每个应用程序创建一个这样的类加载器,加载web应用程序包的/WEB-INF/classes 和 /WEB-INF/lib 目录下的所有Jar包中的类和资源。这些类和资源仅对这个应用程序可见。
就像上面所描述的,web应用程序的类加载的加载流程与默认的Java 2的类记载托管模型是不一样的。当有一个请求需要应用程序的WebappX 类加载器加载一个类的时候,这个类加载器是首先到自己的仓库中查找,而不是先交给上面的类加载器查找。注意:JRE的基础类是不能被覆盖的。对于其他一些类(如J2SE 1.4+中的XML解析器组件),可以使用J2SE1.4的签名特性。最后任何包括servlet API类的Jar包会被忽略。Tomcat5中的其他的类加载器使用正常托管模式。
最后总结一下。
common : tomact server 和 webapp 共享
shared : webapp 共享
server : tomact server 共享
bin : tomact 服务初始化
在一个web应用程序中,类和资源的加载顺序是这样:
# JVM启动
Bootstrap classes of your JVM
# tomact服务启动
System class loader classses (described above)
# web 服务启动
/WEB-INF/classes
/WEB-INF/lib/*.jar
# 加载tomact和webapp 共享common包
$CATALINA_HOME/common/classes
$CATALINA_HOME/common/endorsed/*.jar
$CATALINA_HOME/common/i18n/*.jar
$CATALINA_HOME/common/lib/*.jar
# 加载webapp共享包
$CATALINA_BASE/shared/classes
$CATALINA_BASE/shared/lib/*.jar
分享到:
相关推荐
《Tomcat类加载机制——ClassLoader详解》 在Java Web开发中,Tomcat作为最常用的Servlet容器,其类加载机制对于理解和优化应用性能至关重要。本文将深入探讨Tomcat的ClassLoader是如何工作的,以及它如何影响到...
尤其是Tomcat的ClassLoader机制,它是Java类加载的核心部分,对于理解和解决类加载问题至关重要。本文将围绕“Tomcat 5.0.18 ClassLoader源码”进行深入探讨。 ClassLoader在Java中承担着加载类到JVM中的任务,它的...
在深入了解Tomcat的工作原理时,一个重要的组成部分就是其ClassLoader机制。本文旨在深入剖析Tomcat中特有的类加载器(ClassLoader)体系结构,帮助读者理解Tomcat如何管理和加载不同类型的类库。 #### 二、Tomcat...
Apache Tomcat作为一款广泛使用的开源Servlet容器,其类加载机制是理解和维护基于Tomcat的应用程序的重要部分。Tomcat的类加载器遵循特定的加载顺序,确保了不同应用间的隔离性和资源的正确加载。下面将详细解析...
Java编程世界中,ClassLoader是一个至关重要的概念,尤其是在服务器端应用如Tomcat的环境中。本资料“Tomcat.ClassLoader.rar”聚焦于Java的类加载器(Class Loader)以及它在Tomcat容器中的工作原理,这对于理解和...
本资料旨在帮助读者深入了解Tomcat的工作原理及其内部机制。 ### 一、Tomcat简介 Apache Tomcat是一款免费的开源Web服务器软件,主要用于支持Java Servlet、JavaServer Pages (JSP)技术以及部分Web服务标准规范。...
当`myApp`启动时,Tomcat会自动创建与`myApp`对应的ClassLoader,并通过`ContextBindings`将`jdbc/myDataSource`与该ClassLoader绑定。然后,在应用中,可以使用以下代码来获取数据源: ```java Context initCtx = ...
5. **ClassLoader机制**:Tomcat使用自定义的ClassLoader来加载Web应用程序的类,确保不同应用之间的类隔离,防止冲突。 Tomcat 6.0.18版的特性包括: 1. **性能优化**:相对于之前的版本,6.0.18进行了性能调优,...
5. **ClassLoader机制**:Tomcat的类加载机制允许每个Web应用有自己的类加载器,这有助于隔离不同应用的类,防止类冲突。源码中包含了自定义ClassLoader的实现。 6. **配置文件解析**:Tomcat使用XML配置文件来定义...
5. **ClassLoader机制**:Tomcat的类加载机制允许每个Web应用拥有自己的类加载器,避免类冲突。理解这部分源码对于理解和解决部署问题至关重要。 6. **Session管理**:Tomcat处理用户会话,包括创建、跟踪和管理...
6. **ClassLoader机制** Tomcat使用自定义的ClassLoader来加载Web应用的类,这使得每个应用可以有自己的类空间,避免类冲突。Classloading策略是理解和调试Tomcat应用的重要部分。 7. **Session管理** Tomcat提供...
4. **ClassLoader机制**: Tomcat使用自定义的ClassLoader来加载Web应用的类,每个Web应用都有自己的独立ClassLoader,这种设计确保了应用间的类隔离,避免了类冲突。 5. **JNDI服务**: Tomcat提供JNDI(Java ...
Tomcat作为一款广泛使用的Java应用服务器,其类加载机制有着独特的设计,特别是对Java的双亲委派模型有所突破。本篇文章将深入探讨Tomcat如何打破双亲委派模型,并通过源码分析和图表解析来帮助理解这一机制。 首先...
Tomcat的类加载机制是其独特之处。主要有三个类加载器:Bootstrap ClassLoader、Common ClassLoader和Webapp ClassLoader。Bootstrap加载JDK的类,Common加载`common.loader`指定的类,而Webapp类加载器则负责加载...