`

[转载]Tomcat类加载机制

阅读更多
Tomcat Server在启动的时候将构造一个ClassLoader树,以保证模块的类库是私有的
Tomcat Server的ClassLoader结构如下:
Java代码
    Bootstrap  
       |            
     System   
       |  
     Common  
    /      \  
Catalina  Shared  
          /    \  
       WebApp1  WebApp2 

             Bootstrap
                |         
              System
                |
              Common
             /      \
         Catalina  Shared
                   /    \
                WebApp1  WebApp2


其中:
- Bootstrap - 载入JVM自带的类和$JAVA_HOME/jre/lib/ext/*.jar
- System - 载入$CLASSPATH/*.class
- Common - 载入$CATALINA_HOME/common/...,它们对TOMCAT和所有的WEB APP都可见
- Catalina - 载入$CATALINA_HOME/server/...,它们仅对TOMCAT可见,对所有的WEB APP都不可见
- Shared - 载入$CATALINA_HOME/shared/...,它们仅对所有WEB APP可见,对TOMCAT不可见(也不必见)
- WebApp - 载入ContextBase?/WEB-INF/...,它们仅对该WEB APP可见

每个运行中的线程都有一个成员contextClassLoader,用来在运行时动态地载入其它类,系统默认的contextClassLoader是systemClassLoader,所以一般而言java程序在执行时可以使用JVM自带的类、$JAVA_HOME/jre/lib/ext/中的类和$CLASSPATH/中的类,可以使用Thread.currentThread().setContextClassLoader(...);更改当前线程的contextClassLoader,来改变其载入类的行为

ClassLoader被组织成树形,一般的工作原理是:
1) 线程需要用到某个类,于是contextClassLoader被请求来载入该类
2) contextClassLoader请求它的父ClassLoader来完成该载入请求
3) 如果父ClassLoader无法载入类,则contextClassLoader试图自己来载入
注意:WebApp?ClassLoader的工作原理和上述有少许不同:
它先试图自己载入类(在ContextBase?/WEB-INF/...中载入类),如果无法载入,再请求父ClassLoader完成

由此可得:
- 对于WEB APP线程,它的contextClassLoader是WebApp?ClassLoader
- 对于Tomcat Server线程,它的contextClassLoader是CatalinaClassLoader


http://andyao.iteye.com/blog/34409
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Tomcat 7-9转载资源

    - **Context配置**:定义了一个特定的Web应用程序,包括其根路径、文档基础和类加载器设置。 - **Connector配置**:定义了Tomcat如何监听和响应网络请求,包括端口、协议和线程池配置。 - **Realm配置**:用于用户...

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

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

    [转载] JDBC+Servlet+JSP整合开发之-JSP项目实战

    1. **环境配置**:包括安装JDK、设置环境变量、配置Tomcat服务器、创建Web项目结构。 2. **数据库连接**:使用JDBC建立数据库连接,编写SQL语句,处理结果集。 3. **Servlet处理逻辑**:编写Servlet类,处理用户...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该文献之人无任何关系。谢谢合作 本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该文献之人无任何关系。谢谢合作 本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该文献之人无任何关系。谢谢合作 本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该文献之人无任何关系。谢谢合作 本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地...

Global site tag (gtag.js) - Google Analytics