tomcat7类加载器的分析
在Bootstrap类中,进行完路径设置后
initClassLoaders();
开始初始化类载加器
我们可以看到在tomcat的启动脚本中
"java"
-Djava.util.logging.config.file="D:\apache-tomcat-7.0.0\conf\logging.properties"
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.endorsed.dirs="D:\apache-tomcat-7.0.0\endorsed"
-classpath "D:\apache-tomcat-7.0.0\bin\bootstrap.jar;D:\apache-tomcat-7.0.0\bin\tomcat-juli.jar"
-Dcatalina.base="D:\apache-tomcat-7.0.0"
-Dcatalina.home="D:\apache-tomcat-7.0.0"
-Djava.io.tmpdir="D:\apache-tomcat-7.0.0\temp"
org.apache.catalina.startup.Bootstrap start
有关classpath的设置,只有两个jar文件,那么,在lib中的jar又是如何被加载入tomcat中的呢?
首先这两个jar文件的类加载器是appclassloader.这点可以确定
在分析之前需要了解tomcat的一个重要的配置文件apache-tomcat-7.0.0\conf\catalina.properties
initClassLoaders()首先从这个配置文件中找common.loader为key的值
${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar
首先处理掉其中的引用部分,对逗号分割的每一个值进行处理,这里只有第一个被认识正确的值才是有用的
之后,使用这个路径,通过类加载器工厂产生一个类加载器
ClassLoader classLoader = ClassLoaderFactory.createClassLoader(locations, types, parent);
这里自定义的类加载器是以URLClassLoader为父类的
第一个commonclassloader就已经建立成功了,由于 没有设置父类加载器,则commonclassloader的父类加载器是appclassloader
插一句,这里的自定义类加载器也被注册到MBeanServer中
之后,tomcat对server,shared目录建立了自己的classloader,他们的父类加载器就是commonclassloader
在tomcat7中也许你看不到server,shared目录了,但在早期的版本中还是会有这样的目录 存在
以上纯属个人分析的结果,如果有错误,欢迎指证.大家一起进步
分享到:
相关推荐
这个"DevLoader.zip"文件可能包含与Tomcat自定义类加载器相关的资料,特别是名为"DevLoader"的类加载器,这可能是Tomcat为开发者提供的一种特殊加载器。 首先,我们来理解一下类加载器的基本概念。在Java中,类加载...
通过阅读和分析该文件,你可以更直观地了解每个类加载器的角色及其交互方式。 总之,理解Java类加载器和Tomcat的类加载机制对于开发和调试基于Tomcat的应用程序至关重要。它涉及到类的查找、加载、初始化等过程,...
JVM采用**父类委托机制**来加载类,这意味着当一个类加载器接收到加载请求时,它首先会委托给其父类加载器尝试加载,直到达到Bootstrap类加载器(顶级加载器)。如果父类加载器找不到所需类,那么请求会回溯到子类...
2. "Tomcat的类载入器以及源码分析.doc":详细介绍了Tomcat的类加载器,如WebappClassLoader,它如何根据不同的web应用程序加载类,以及如何避免类冲突。 3. "理解Tomcat的WebappClassLoader(web应用类加载器)一....
Bootstrap加载JDK的类,Common加载`common.loader`指定的类,而Webapp类加载器则负责加载每个Web应用自己的类。理解类加载顺序和隔离机制,能避免类冲突,保证应用的正常运行。 5. **Tomcat权威指南** "Tomcat权威...
3. **类加载器机制**:Tomcat的类加载器设计独特,理解它如何加载Web应用的类,以及不同Web应用之间的隔离性是重要的一环。 4. **部署和生命周期管理**:了解Tomcat如何解析并部署WAR文件,以及Web应用的启动、停止...
默认情况下,Tomcat会采用“双亲委派模型”,这意味着某些类会被委托给父类加载器进行加载,而其他类则由子类加载器负责。如果配置不正确,可能会导致同一个类在不同的上下文中被加载,从而引发类型转换异常。 - ...
Tomcat7源码还涉及到了类加载机制,它采用了自定义的类加载器,如`CatalinaClassLoader`和`SharedClassLoader`,理解这些类加载器的工作方式有助于解决类冲突和加载顺序问题。 此外,Tomcat的安全管理也是重要一环...
以下是对Tomcat7启动流程的一个深入分析: 1. **启动脚本**:通过执行`startup.bat`或`startup.sh`(取决于操作系统)来启动Tomcat。这些脚本会调用`catalina.bat`或`catalina.sh`。 2. **加载Classpath**:在启动...
源代码中可以学习到如何自定义类加载器,以及如何处理不同Web应用的类路径。 7. **部署和热更新**: Tomcat支持自动部署和热更新,即在不重启服务器的情况下更新Web应用。源码解释了如何监测文件系统变化,以及如何...
`Bootstrap` 类作为 Tomcat 的启动入口,承担着构建一个独立的类加载器的任务,用于装载 `Catalina` 的内部类,以此来确保这些内部类与系统的 classpath 相隔离,避免与应用级别的类产生冲突。 - **主函数 main** ...
综上,Tomcat6和Tomcat7是两种不同的Java应用服务器,适用于不同的项目需求,而HttpWatch作为性能分析工具,能帮助开发者深入理解并优化网站的加载性能。这三者结合使用,可以为Java Web应用的开发和维护提供有力的...
2. **CommonClassLoader**: 这是Tomcat的全局类加载器,负责加载服务器级别的类库,这些类库对所有Web应用可见。在双亲委派模型中,WebAppClassLoader会将找不到的类委托给CommonClassLoader。 3. **Catalina...
具体来说,它创建了一个名为`SpringContextClassLoader`的自定义类加载器,该加载器继承自Tomcat的标准类加载器,并实现了`LoadTimeWeaver`接口,从而使得在Tomcat中运行的Spring应用可以利用这个特性。 当我们解压...
Apache Tomcat 7 是一个广泛使用的开源Java Servlet容器,它实现了Java EE的Web应用程序部分,特别是Servlet和JSP规范。这个版本7.0.42是Tomcat 7的一个稳定版本,提供了对Java Servlet 3.0和JavaServer Pages (JSP)...
【标题】"Tomcat7源码" ...通过分析Tomcat7源码,开发者可以学习到如何构建一个高效的Web服务器,理解Java Web应用的运行机制,同时也可以根据具体需求对其进行优化和扩展,以满足特定项目的需求。
《Tomcat6源码分析——深入理解Web服务器的运行机制》 Tomcat6作为Apache软件基金会的Jakarta项目的一部分,是一款广泛使用的Java Servlet容器,它实现了Java Servlet和JavaServer Pages(JSP)规范,为开发和部署...
本文将重点解析Tomcat启动时的关键步骤和核心组件,特别是涉及的类加载器、容器结构以及组件生命周期管理。 首先,Tomcat的启动过程始于`startup.bat`或`startup.sh`脚本,这些脚本最终调用`org.apache.catalina....
分析Tomcat 7的源代码可以帮助我们理解其在处理多线程、容器管理、安全策略等方面的设计决策。例如,`Catalina`是Tomcat的核心引擎,负责加载和管理Web应用程序;` Coyote `组件处理网络通信,如HTTP和AJP协议;` ...
- Tomcat使用自定义的类加载器,包括Catalina类加载器、Shared类加载器和Web应用类加载器,实现不同级别的隔离和加载策略。 5. **连接器(Connector)和容器(Container)**: - 连接器负责接收和发送HTTP请求,...