`
JackyCheng2007
  • 浏览: 254329 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Tomcat 7 源码分析 - 初始化 class loader

阅读更多
Bootstrap 在启动的时候初始化了三种class loader:common,server和shared。在它的createClassLoader方法里面,通过:
String value = CatalinaProperties.getProperty(name + ".loader");

来得到属性文件catalina.properties里面获得他们的配置:
common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar
server.loader=
shared.loader=

可以看出默认情况下指示对common class loader做了配置,而实际上它也是server和shared的父loader。
经过replace${}变量之后得到:
C:\cygwin\home\Administrator\tomcat7/output/build/lib,
C:\cygwin\home\Administrator\tomcat7/output/build/lib/*.jar,
C:\cygwin\home\Administrator\tomcat7/output/build/lib,
C:\cygwin\home\Administrator\tomcat7/output/build/lib/*.jar

把他们split成4个repository,尽管有重复,也没有过滤掉。放入:
List<Repository> repositories = new ArrayList<Repository>();

然后利用工厂来创建:
ClassLoader classLoader = ClassLoaderFactory.createClassLoader
            (repositories, parent);

这个class loader其实是一个URLClassLoader,用来根据URL查找并load类。如果是jar就直接从jar里面找class,如果是dir,就找它下面的jar,然后从jar里面找类。
然后就查找MBServer,这个其实是为管理和监控JVM运行的API。找到后就将这个class loader 注册进去:
mBeanServer.registerMBean(classLoader, objectName);


因为,server和shared的配置都是空,那么他们的class loader都指向了他们的父loader:common loader。 也就是说默认情况下,这3个loader都是common loader。也就是说tomcat会从output/build/lib下面load 类。
这个目录下面有这些jar:


  • 大小: 56.3 KB
分享到:
评论

相关推荐

    tomcat-bootstrap and juli.jar

    Tomcat-Bootstrap是Tomcat启动过程中的核心部分,它的主要职责是加载Tomcat的核心类并初始化服务器。这个jar文件包含了用于启动Tomcat服务器的基本Java代码。当我们在命令行中运行`catalina.sh`或`catalina.bat`启动...

    how tomcat work

    然后初始化各个组件,建立监听套接字,等待客户端请求。 3. **请求处理**: - **接收请求**:当客户端发起HTTP请求时,Coyote接收请求,并将其转换为内部表示。 - **路由到正确的Context**:根据请求URL,Tomcat...

    Tomcat7 负载Jar包

    Classloading是Java运行时环境的一部分,负责查找、加载和初始化类。在Tomcat中,这个过程涉及到`WEB-INF/lib`目录下的所有JAR文件。每个Web应用都有自己的类加载器,这样可以避免不同应用之间的类冲突。 **一、类...

    how-tomcat-works.docx

    Jasper在解析JSP文件时生成对应的Java源代码,然后通过Catalina的Class Loader加载到内存中运行。 - **Coyote**:处理HTTP请求和响应,是Tomcat与网络通信的接口。它提供了连接器(Connector)组件,负责接收和...

    Tomcat技术培训

    - **监听端口**:`StandardServer`实例完成初始化和启动后,监听8005端口等待接收到shutdown命令,此时会调用相应的停止方法来关闭容器。 - **异常处理**:通过`Runtime.getRuntime().addShutdownHook()`方法确保在...

    How_Tomcat_Works 中文版

    - **加载和初始化Servlet**:当第一次访问某个Servlet时,Tomcat会将其加载到内存中并进行初始化。这一过程涉及到Class Loader机制的应用,确保每个Servlet类能够正确加载。 - **会话管理**:Tomcat使用会话管理机制...

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

    Java 类加载器是Java虚拟机(JVM)的核心组成部分,它负责将...它涉及到类的查找、加载、初始化等过程,以及如何通过调整类加载器配置来优化应用性能和安全性。深入研究这些概念,能够让你在处理类加载问题时游刃有余。

    servlet源码

    4. **Servlet的加载和管理**:`org.apache.catalina.loader.WebappClassLoader`负责加载Web应用的类,`org.apache.catalina.core.StandardWrapper`管理单个Servlet的实例化和初始化。 5. **servlet的映射**:在`org...

    spring boot应用启动原理分析.pdf

    - **SpringApplication.run**: 应用的主类 `SpringBootDemoApplication` 中的 `main` 方法调用 `SpringApplication.run` 方法,这会初始化 Spring 容器并扫描组件(beans),然后启动应用。 3. **内置 Tomcat 容器...

    Tomcat 类加载器的实现方法及实例代码

    在初始化过程中,如在Bootstrap的initClassLoaders方法中,会创建并设置这些类加载器。例如,commonLoader是通过createClassLoader方法创建,并根据配置文件或默认值设置其父加载器。 总的来说,Tomcat的类加载器...

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

    - **初始化(Initialized)**:执行类的初始化方法 `&lt;clinit&gt;`,初始化静态变量和静态代码块。 类加载器采用**委托模型机制**,加载时先由顶层的启动类加载器 Bootstrap Loader 加载,然后是扩展类加载器 Extension...

    JAX-WS.zip

    这个错误通常出现在尝试部署JAX-WS Web服务到应用服务器(如Tomcat、Glassfish等)时,因为应用服务器无法找到`WSServletContextListener`类,这个类是JAX-WS实现的一部分,用于初始化Web服务。为了正确解决这个问题...

    spring boot应用启动原理分析.docx

    5. **应用上下文初始化**:创建并初始化 Spring 应用上下文,加载所有bean并进行依赖注入。 6. **应用运行**:调用 `ApplicationRunner` 或 `CommandLineRunner` 接口的实现方法,执行用户定义的启动逻辑。 在 ...

    100道 Jvm面试题总结及答案.docx

    在类加载阶段,Jvm 通过 Class Loader 将 Java 类文件加载到内存中,在类链接阶段,Jvm 将类文件中的符号引用解析为直接引用,在类初始化阶段,Jvm 将类文件中的静态变量初始化,在对象创建阶段,Jvm 将对象创建在堆...

    SpringBoot应用部署到中创AS

    对于war包部署,我们可能需要扩展`SpringBootServletInitializer`,并重写`configure()`方法,以确保应用能在AS的web容器中正确初始化: ```java @SpringBootApplication public class DemoApplication extends...

    web.xml中ContextLoaderListener的运行过程解析

    `ContextLoaderListener`是Spring框架中的一个监听器,它负责初始化Spring应用上下文。下面将详细解析`web.xml`中`ContextLoaderListener`的运行过程。 ### 1. `web.xml`的作用 `web.xml`文件主要用来定义Servlet、...

    day021-反射和注解笔记和代码.rar

    initialize:表示是否初始化,默认是false loader:可以指定一个类加载器加载字节码文件 2. 全限定类名.class 3. 对象名.getClass() Class类中方法newInstance():创建...

    Tomcat.ClassLoader.rar_Java编程_Java_

    本资料“Tomcat.ClassLoader.rar”聚焦于Java的类加载器(Class Loader)以及它在Tomcat容器中的工作原理,这对于理解和优化Java应用程序的性能至关重要。 首先,让我们深入了解Java ClassLoader。在Java中,...

    servlet运行原理及生命周期.pdf

    - 在 Tomcat 服务器中,这一步通常由其内部的 Loader 类完成。 3. **初始化 Servlet**: - **无参 init() 方法**:首先调用无参的 `init()` 方法,进行一些基本的初始化工作。 - **有参 init(ServletConfig ...

    类加载器(java)

    1. **bootstrap class loader**:这是最基础的类加载器,由C++实现,负责加载JRE核心库,如rt.jar,它包含了Java语言的基础类库,如`java.lang.Object`等。 2. **extension class loader**:扩展类加载器,负责加载...

Global site tag (gtag.js) - Google Analytics