`
agapple
  • 浏览: 1597819 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

tomact classloader机制

    博客分类:
  • java
阅读更多

官方原文: 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

    《Tomcat类加载机制——ClassLoader详解》 在Java Web开发中,Tomcat作为最常用的Servlet容器,其类加载机制对于理解和优化应用性能至关重要。本文将深入探讨Tomcat的ClassLoader是如何工作的,以及它如何影响到...

    Tomcat 5.0.18 ClassLoader source code insight

    尤其是Tomcat的ClassLoader机制,它是Java类加载的核心部分,对于理解和解决类加载问题至关重要。本文将围绕“Tomcat 5.0.18 ClassLoader源码”进行深入探讨。 ClassLoader在Java中承担着加载类到JVM中的任务,它的...

    Tomcat研究之ClassLoader.pdf

    在深入了解Tomcat的工作原理时,一个重要的组成部分就是其ClassLoader机制。本文旨在深入剖析Tomcat中特有的类加载器(ClassLoader)体系结构,帮助读者理解Tomcat如何管理和加载不同类型的类库。 #### 二、Tomcat...

    Tomcat加载顺序

    Apache Tomcat作为一款广泛使用的开源Servlet容器,其类加载机制是理解和维护基于Tomcat的应用程序的重要部分。Tomcat的类加载器遵循特定的加载顺序,确保了不同应用间的隔离性和资源的正确加载。下面将详细解析...

    Tomcat.ClassLoader.rar_Java编程_Java_

    Java编程世界中,ClassLoader是一个至关重要的概念,尤其是在服务器端应用如Tomcat的环境中。本资料“Tomcat.ClassLoader.rar”聚焦于Java的类加载器(Class Loader)以及它在Tomcat容器中的工作原理,这对于理解和...

    《深入剖析 Tomcat》PDF版本下载.txt

    本资料旨在帮助读者深入了解Tomcat的工作原理及其内部机制。 ### 一、Tomcat简介 Apache Tomcat是一款免费的开源Web服务器软件,主要用于支持Java Servlet、JavaServer Pages (JSP)技术以及部分Web服务标准规范。...

    Tomcat中JNDI原理

    当`myApp`启动时,Tomcat会自动创建与`myApp`对应的ClassLoader,并通过`ContextBindings`将`jdbc/myDataSource`与该ClassLoader绑定。然后,在应用中,可以使用以下代码来获取数据源: ```java Context initCtx = ...

    Tomcat:apache-tomcat-6.0.18

    5. **ClassLoader机制**:Tomcat使用自定义的ClassLoader来加载Web应用程序的类,确保不同应用之间的类隔离,防止冲突。 Tomcat 6.0.18版的特性包括: 1. **性能优化**:相对于之前的版本,6.0.18进行了性能调优,...

    apache-tomcat-7.0.40-src

    5. **ClassLoader机制**:Tomcat的类加载机制允许每个Web应用有自己的类加载器,这有助于隔离不同应用的类,防止类冲突。源码中包含了自定义ClassLoader的实现。 6. **配置文件解析**:Tomcat使用XML配置文件来定义...

    Tomcat6的源码

    5. **ClassLoader机制**:Tomcat的类加载机制允许每个Web应用拥有自己的类加载器,避免类冲突。理解这部分源码对于理解和解决部署问题至关重要。 6. **Session管理**:Tomcat处理用户会话,包括创建、跟踪和管理...

    tomcat8源码

    6. **ClassLoader机制** Tomcat使用自定义的ClassLoader来加载Web应用的类,这使得每个应用可以有自己的类空间,避免类冲突。Classloading策略是理解和调试Tomcat应用的重要部分。 7. **Session管理** Tomcat提供...

    TOMCAT源代码,包括转载得别人的分析

    4. **ClassLoader机制**: Tomcat使用自定义的ClassLoader来加载Web应用的类,每个Web应用都有自己的独立ClassLoader,这种设计确保了应用间的类隔离,避免了类冲突。 5. **JNDI服务**: Tomcat提供JNDI(Java ...

    细说Tomcat如何打破双亲委派(有源码和图)

    Tomcat作为一款广泛使用的Java应用服务器,其类加载机制有着独特的设计,特别是对Java的双亲委派模型有所突破。本篇文章将深入探讨Tomcat如何打破双亲委派模型,并通过源码分析和图表解析来帮助理解这一机制。 首先...

    tomcat 学习与分析总结资料

    Tomcat的类加载机制是其独特之处。主要有三个类加载器:Bootstrap ClassLoader、Common ClassLoader和Webapp ClassLoader。Bootstrap加载JDK的类,Common加载`common.loader`指定的类,而Webapp类加载器则负责加载...

Global site tag (gtag.js) - Google Analytics