Tomcat类加载架构 (2)

      

Tomcat类加载架构

      

    

Tomcat类加载架构

  (2)/server/*实际创建的时候为/server/lib目录,只能被Tomcat使用的类库。

  (3)/shared/*实际创建的时候为/shared/lib目录,可以被所有的Web应用程序共享使用,但是对Tomcat是不可见的。

  (4)/webapps(wtswebapps)/project/WEB-INF/*:实际为/WebApp/project/WEB-INF/libProject独享有的类库

 

3、Tomcat自定义加载器

  Tomcat自定义的类加载器主要有:ComnonClassLoaderCatalinaClassLoaderSharedClassLoaderWebAppClassLoader四个类加载器。

  (1)ComnonClassLoader:加载/common/*目录下的类,但是上述可知现在的指定加载都会在Catalina.properties中配置。

  (2)CatalinaClassLoader:加载/server/*目录下的类,同理现在在Catalina.properties中指定配置。

  (3)SharedClassLoader:加载/shared/*目录下的类,同理现在在Catalina.properties中指定配置。

  (4)WebAppClassLoader:加载/webapps(wtswebapps)/project/WEB-INF/*目录下项目lib中的类。

   结合之前三个类加载器(BootstrapClassLoaderExtensionClassLoaderApplicationLoader)与Tomcat自定义的四个加载器组合成的委派关系(Tomcat服务器的类加载机构)如下所示:

                            

Tomcat类加载架构

                         (注:其中JasperLoader为Jsp类加载器,JSP文件编译后为Class文件,需要加载)

 

  通过此关系图我们可以得到如下两点:

  (1)CatalinaClassLoaderSharedClassLoader是相互隔离独立的;

  (2)WebAppClassLoader可以使用SharedClassLoader加载类,同理WebAppClassLoader可以代替JspClassLoader加载类,CommonClassLoader加载的类可以被CatalinaClassLoaderSharedClassLoader使用

  同时需要注意还有以下两点:

JspClassLoader只能加载这个JSP文件所编译出Class文件JSP文件被修改时,会替换当前JspClassLoader实例,之后会重新建立一个新的JspClassLoader实例,这也就是HotSwap的内部实现

不同的WebAppClassLoader是相互隔离的

对于Tomcat 6.x版本,只有在conf/catalina.properties中配置了shared.loaderserver.loader才能使用SharedClassLoaderCatalinaClassLoader实例,不然会默认使用ComnonClassLoader的实例来代替;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpzfww.html