Tomcat 如何破坏双亲委派机制的?

一、先说说Tomcat为什么要破坏双亲委派模型?
        事实上,在Tomcat中是可以存放多个war项目的,可以运行多个war项目的,但是为什么可以同时运行多个war项目,其实这个和打破双亲委派模型有关系,因为在多个war项目中难免会出现相同的类名,但是有不同的功能,如果Tomcat没有打破双亲委派模型的话,就会出现将把所有的类都交给BootStraptClassLoader那么就不能存在多个war项目了,所以这是一个破坏双亲委派模型的原因。
        
二、那Tomcat是如何破坏双亲委派模型的呢?
        首先,先看图:
        

        会发现在整个双亲委派模型的结构中,添加了两部分:
        第一部分:主要的作用是加载Tomcat包中的类,这里依然采用的是双亲委派模型。
        第二部分:主要的作用是打破双亲委派模型。

        首先说第一部分:这部分的类加载器,哎tomcat7及其以前是tomcat自定义的三个类加载器,到了tomcat8及其以后,tomcat就将这三个文件合并到了一个lib目录。
        
        了解这三个部分的类加载器:
        commonClassLoader:tomcat最基本的类加载器,加载路径中的class可以被tomcat容器本身和各个webapp访问。
        CatalinaClassLoader:tomcat容器私有的类加载器,加载路径中的class对于webapp不可见。
        sharedClassLoader:sharedClassLoader是各个webapps共享的类加载器,加载路径中的class对于所有的webapp都是可见的,但是对于tomcat容器是不可见的。
        这一部分类加载器,依然采用的是双亲委派机制,原因是,它只有一份,即使有重复,也是用这一份为准。

        第二部分:这部分的类加载器就是用于打破双亲委派模型的类加载器。
        webappClassLoader类加载器:项目在打war包的时候, tomcat自动生成的类加载器, 也就是说 , 每一个项目打成一个war包, tomcat都会自动生成一个类加载器, 专门用来加载这个war包. 而这个类加载器打破了双亲委派机制。

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-02 15:39
点赞 评论 收藏
分享
牛客92804383...:在他心里你已经是他的员工了
点赞 评论 收藏
分享
机械打工仔:我来告诉你原因,是因为sobb有在线简历,有些HR为了快会直接先看在线简历,初步感觉不合适就不会找你要详细的了
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务