`

Tomcat类加载机制

阅读更多

 



各个类加载器的作用描述如下:
1)Bootstrap ClassLoader: 负责加载由虚拟机提供的基本运行时类和系统扩展目录($JAVA_HOME/jre/lib/ext)下的JAR包;
2)System ClassLoader: 通常这个加载器用来加载CLASSPATH环境变量中指定的类,但在Tomcat5的标准启动脚本($CATALINA_HOME/bin/catalina.sh或%CATALINA_HOME%/bin/catalina.bat)中改变了它的行为,它只加载下面的类:
$CATALINA_HOME/bin/bootstrap.jar    // Contains the main() method that is used to initialize the Tomcat 5 server, and the class loader implementation classes it depends on.
$JAVA_HOME/lib/tools.jar // Contains the "javac" compiler used to convert JSP pages into servlet classes.
$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 implementation.

Common ClassLoader:它负责加载Tomcat本身和所有的web应用都能看到的类。通常,应用的类不应该由他加载。

ant.jar - Apache Ant.
commons-collection.jar  // Jakarta commons collection.
commons-dbcp.jar // Jakarta commons DBCP, providing a JDBC connection pool to web applications.
commons-el.jar // Jakarta commons el, implementing the expression language used by Jasper.
commons-pool.jar // Jakarta commons pool.
jasper-compiler.jar // The JSP 2.0 compiler.
jasper-runtime.jar // The JSP 2.0 runtime.
jsp-api.jar // The JSP 2.0 API.
naming-common.jar // The JNDI implementation used by Tomcat 5 to represent in-memory naming contexts.
naming-factory.jar // The JNDI implementation used by Tomcat 5 to resolve references to enterprise resources (EJB, connection pools).
naming-resources.jar // The specialized JNDI naming context implementation used to represent the static resources of a web application.
servlet-api.jar // The Servlet and JSP API classes.
xerces.jar // The XML parser that is visible by default to Tomcat internal classes and to web applications.
xml-apis.jar

Catalina ClassLoader: 用来加载实现Tomcat自己需要的类。由它加载的类对web应用都是不可见的。$CATALINA_HOME/server/classes,$CATALINA_HOME/server/lib,都由这个加载器加载。缺省的,包括:

jakarta-regexp-X.Y.jar - The binary distribution of the Jakarta Regexp regular expression processing library, used in the implementation of request filters.

tomcat-coyote.jar - Coyote connector for Tomcat 5.

tomcat-jk2.jar - Classes for the Java portion of the JK 2 web server connector, which allows Tomcat to run behind web servers such as Apache and iPlanet iAS and iWS.

Shared ClassLoader:被所有的web应用共享的类和资源由这个加载器加载。$CATALINA_BASE/shared/classed,$CATALINA_BASE/shared/lib,都由这个加载器加载。
WebappX ClassLoader:对每个Tomcat里的web应用都创建一个加载器,web应用下的WEB-INF/classes,WEB-INF/lib,都由这个加载器加载,由它所加载的类对其他的web应用是不可见的。
web应用的加载器(WebappX)和JDK的委托模型略有不同,这是根据Servlet2.3规范做出的。当WebappX被请求加载一个类时,它首先尝试自己加载,而不是先委托给它的父加载器加载,如果无法加载该类,则委托它的父加载器加载。但是,对于下面的类,仍然要先委托给父加载器:

javax.*
org.xml.sax.*
org.w3c.dom.*
org.apache.xerces.*
org.apache.xalan.*
Last, any JAR containing servlet API classes will be ignored by the classloader.

最后,以web应用的角度,要加载类或者资源时,会以下面的顺序查找:
Bootstrap classes of your JVM
System class loader classses (described above)
/WEB-INF/classes of your web application
/WEB-INF/lib/*.jar of your web application
$CATALINA_HOME/common/classes
$CATALINA_HOME/common/endorsed/*.jar
$CATALINA_HOME/common/lib/*.jar
$CATALINA_BASE/shared/classes
$CATALINA_BASE/shared/lib/*.jar

对于只用于某一个web应用的类或资源,放在这个web应用下的/WEB-INF/classes目录下,如果是JAR,就放在这个web应用下的WEB-INF/lib目录下。
     对于让所有的web应用共享的类或资源,放在$CATALINA_BASE/shared/classes目录下,如果是JAR,就放在$CATALINA_BASE/shared/lib目录下。

 

http://idealab.iteye.com/blog/361243

类加载器原理: http://www.importnew.com/6581.html

 

分享到:
评论

相关推荐

    tomcat 类加载机制 —— ClassLoader

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

    tomcat类加载器

    在Tomcat中,类加载机制的设计是为了支持多个Web应用程序的隔离运行。每个Web应用都有自己的类加载器,这样可以确保一个应用的类不会意外地与另一个应用的类混淆。默认的类加载器结构包括以下层次: 1. Bootstrap ...

    tomcat 源码分析系列文档

    5. "tomcat加载类的顺序.doc":详细说明了Tomcat加载类的具体步骤和顺序,这对于理解和调试类加载问题至关重要。 6. "Tomcat源码研究.pdf":提供了一个全面的源码分析概览,可能包括了Tomcat的主要组件、设计模式...

    java类加载器-tomcat中的类加载器

    Tomcat,作为广泛使用的Java Servlet容器,它自定义了一套类加载机制,以满足Web应用程序的特殊需求。下面我们将深入探讨Java类加载器以及Tomcat中的类加载器。 在Java中,类加载器主要分为三个层次:Bootstrap ...

    tomcat使用与调优,nginx

    第五部分:Tomcat 类加载机制剖析 第六部分:Tomcat 对 Https 的⽀持及 Tomcat 性能优化策略 nginx 第⼀部分:Nginx基础回顾(Nginx是什么?能做什么事情(应⽤在什么场合)?常⽤命令是什么?) 第⼆部分:Nginx核⼼...

    Tomcat组成及工作原理借鉴.pdf

    Tomcat 的类加载机制是基于 Java 的类加载机制。它使用了多个类加载器来加载不同的类和资源。这些类加载器包括: * Bootstrap:加载 Java 的核心类库 * System:加载系统类库 * Common:加载 Tomcat 的公共类库 * ...

    Tomcat启动时类加载顺序

    #### 二、类加载机制概述 在Java中,类加载器(ClassLoader)负责将.class文件加载到JVM中。Tomcat通过自定义的类加载器实现了特定的类加载顺序,以确保能够正确处理不同来源的类文件,避免类的重复加载和类版本冲突...

    tomcat调优.zip

    【标题】"Tomcat调优.zip"所包含的是一系列关于Tomcat服务器优化的资料,主要探讨了Tomcat的整体架构、线程模型以及类加载机制等核心知识点。 首先,我们来深入理解一下Tomcat的整体架构及其设计精髓。Tomcat作为一...

    Java 类在 Tomcat 中是如何加载的(过程分析)

    当Tomcat加载类时,它遵循以下顺序: - 使用Bootstrap类加载器尝试加载。 - 使用System类加载器尝试加载。 - 使用Webapp类加载器加载`WEB-INF/classes`下的类。 - 使用Webapp类加载器加载`WEB-INF/lib`中的jar...

    Tomcat工作原理祥解

    总结,Tomcat的工作原理涉及类加载机制、配置文件解析以及请求处理流程等复杂环节。理解这些原理对于优化Tomcat性能、解决故障和开发高效Web应用至关重要。深入学习Tomcat,可以提高开发效率并更好地管理服务器资源...

    让tomcat自动加载修改过的类和servlet

    因此,让Tomcat自动加载修改过的类和Servlet成为提高开发效率的关键需求之一。 ### 让Tomcat自动加载修改过的类和Servlet #### 知识点一:理解Tomcat的热部署机制 Tomcat默认情况下并不会自动检测到类或Servlet的...

    Tomcat 配置分解

    ### Tomcat配置详解 #### Tomcat简介 Tomcat是一个开源的轻量级Web应用程序服务器,在中小型...此外,掌握Tomcat的类加载机制有助于开发者更好地理解Web应用在Tomcat中的运行方式,从而更有效地进行开发和维护工作。

    Tomcat通俗讲解

    Tomcat采用了多层类加载机制,确保不同层次的应用之间不会出现类加载冲突。以下是类加载器的基本层级结构及其加载顺序: - **Bootstrap ClassLoader**:加载Java核心类库,位于`$JAVA_HOME/jre/lib/ext/*.jar`。 - ...

    面试必问之jvm与性能优化.docx

    本文将深入探讨JVM加载Class文件的机制,类加载器的概念及其类型,以及Tomcat服务器特有的类加载机制。 1. JVM加载Class文件的原理机制 JVM加载Class文件的过程分为三个主要阶段:装载、连接和初始化。 - **装载*...

    携程Java高级工程师岗位面试真题

    以上内容是Java高级工程师面试中常见的知识点,包括JVM加载Class的原理、类加载器的角色以及Tomcat的类加载机制。理解这些内容对于深入理解Java应用程序的运行机制以及解决相关问题至关重要。在面试中,展示对这些...

    图灵Java高级互联网架构师第6期性能调优专题笔记.zip

    内容包括: 01-深入理解Mysql索引底层数据结构与算法-诸葛 ...17-Tomcat类加载机制&热加载热部署实现原理-fox 18.类加载机制深度解析-诸葛 19.JVM整体结构深度解析-诸葛 20.JVM内存分配机制详解-诸葛 ...

    Tomcat详解

    Tomcat采用了一种层次化的类加载机制,确保每个类加载器只加载自己权限范围内的类,并遵循特定的加载顺序。这种机制保证了系统的稳定性和安全性。 1. **Bootstrap**:加载核心Java库,这些库通常位于`$JAVA_HOME/...

    类加载器与Tomcat

    在Java的运行环境中,类加载器扮演着至关重要...在处理类冲突、版本控制和热部署等问题时,理解Tomcat的类加载机制至关重要。开发者在进行应用部署和配置时,必须考虑到类加载器的层次和行为,以避免潜在的问题和冲突。

    译 Java类加载机制(二)

    例如,在大型企业级应用和容器(如Tomcat)中,类加载机制的理解和利用是优化系统性能和维护性的关键。 总的来说,Java类加载机制是一个复杂但重要的主题,涉及到类加载器、类的生命周期、双亲委派模型以及自定义...

Global site tag (gtag.js) - Google Analytics