Tomcat 5.5.23 文档阅读Tips 9 - Class Loading

系统 1590 0
本文讲述了Tomcat的classloading的逻辑。 

1. 之所以要讲Classloading的事情,关键还是解决在开发过程中碰到的class找不到,一些资源文件找不到的问题。要解决这样的问题,就必须理解Tomcat的classloader会到什么地方去找class,找资源。 

2. 首先是一个总结,告诉我们应该怎样防止自己的class和资源: 

(1) For classes and resources specific to a particular web application, place unpacked classes and resources under /WEB-INF/classes of your web application archive, or place JAR files containing those classes and resources under /WEB-INF/lib of your web application archive. 
(2) For classes and resources that must be shared across all web applications, place unpacked classes and resources under $CATALINA_BASE/shared/classes, or place JAR files containing those classes and resources under $CATALINA_BASE/shared/lib. 

大体的意思就是,如果资源和class文件只是for一个web app的,那么请把class文件,资源文件放到/WEB-INF/classes目录下,如果已经将class或资源文件打成了jar包,或是一些第三方的jar包,请放到/WEB-INF/lib目录下;如果这些class和资源文件要共享给其他的web app,请把他们放到$CATALINA_BASE/shared/classes, $CATALINA_BASE/shared/lib目录下。这里,$CATALINA_BASE一般就是$CATALINA_HOME,只不过的当我们启动了多个Tomcat的时候,需要用到$CATALINA_BASE,因为多个Tomcat他们的$CATALINA_HOME不一定一样。 

3. 然后文章就详细描述了Tomcat的一些classloader,和他们的逻辑,从而也就解释了上面的总结,可以看到最后的webappx这种classesloader就会负责load某个webapp中的资源,而有一个叫做Shared的classloader就会load放在$CATALINA_BASE/shared目录下的资源。这就是为什么我们把东西放在这些地方就能被发现和load的原因。具体可以看本文档,讲的很详细,包括Tomcat下面common目录下的东西是由哪个classloader load的(就是一个名为Common的classloader),等等。比如那个名为Catalina的classloader就负责load tomcat自己的classes,所以这个classloader对于webapp来说是不可见的。这里就是Tomcat中的classloader的关系图: 

 

Bootstrap
             |
       System
             |
       Common
         /      \
Catalina    Shared
                  /    \
        Webapp1  Webapp2 ...

 

  4. 最后文档给出了一个非常有用的东西,也就是对于一个web app来说,tomcat是按照如下顺序来寻找class和资源的: 


    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/i18n/*.jar 
    $CATALINA_HOME/common/lib/*.jar 
    $CATALINA_BASE/shared/classes 
    $CATALINA_BASE/shared/lib/*.jar

Tomcat 5.5.23 文档阅读Tips 9 - Class Loading


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论