Tomcat类加载机制
Tomcat核心三部分
- Web容器,处理静态页面;
- CatAlina,一个servlet容器,处理servlet;
- JSP容器,把jsp页面翻译成一般的servlet。
Tomcat类加载机制 - 启动类加载器(Bootstrap Classloader)
- 扩展类加载器(Extension Classloader)
- 应用程序类加载器(Application ClassLoader)
- Common类加载器
- Catalina类加载器
- Shared类加载器
- WebApp类加载器
- Jsp类加载器
commonLoader:Tomcat最基本的类加载器,加载路径中的class可以被Tomcat容器本身以及各个WebApp访问;
catalinaLoader:Tomcat容器私有的类加载器,加载路径中的class对于WebApp不可见;
sharedLoader:各个WebApp共享的类加载器,加载路径中的class对于所有WebApp可见,但是对于Tomcat容器不可见;
WebAppClassLoader:各个WebApp私有的类加载器,加载路径中的class只对当前WebApp可见。
CommonClassLoader能加载的类都可以被CatalinaClassLoader和SharedClassLoader使用,从而实现了公有类库的 共用,而CatAlinaClassLoad而和SharedClassLoader自己能加载的类则与对方相互隔离。 WebAppClassLoader可以使用SharedClassLoader加载到的类,但各个WebAppClassLoader实例之间相互隔离; JasperLoader的加载范围仅仅是这个jsp文件所编译出来的那一个.Class文件,当Web容器检测到jsp文件被修改时, 会替换掉目前的JasperLoader的实例,并通过再建立一个新的Jsp类加载器来实现Jsp文件的HotSwap功能。
- Jsp类加载器
commonLoader:Tomcat最基本的类加载器,加载路径中的class可以被Tomcat容器本身以及各个WebApp访问;