tomcat为什么要自定义三个类加载器
1.tomcat可能要部署多个web项目,多个项目可以依赖同一个类库不同版本jar包,但是不同版本的jar包要进行隔离
2.多个项目不能共享一份jar包的class,不同的项目不能直接共用同一个类加载器
类加载器的特性:
- 判断一个类是否存在唯一的依据是:包名+类名
- 对同一个class文件只能加载一次,如果再次搜索到同名的class文件会直接抛出异常(所以不同版本的jar包要进行隔离)
3.避免类加载器的内存泄漏:
如果类加载器发生了内存泄露,那么与它关联的类、缓存状态、配置信息都会发生泄漏,所以进行隔离可以保证其它应用程序的安全
4.服务器本身也有自己依赖的jar包
基于安全考虑,服务器所使用的jar包应该与应用程序的jar包互相独立。服务器本身依赖的类,用自己独有的类加载器去加载,否则,项目中如果使用了一些来源不明、不安全的jar,可能会危及整个服务器
5.多个项目如果依赖同一个类库的相同版本,tomcat提供了一个共享类加载器sharedLoader,解决这个问题
6.热部署:
- 比较现代的服务器,都具备该功能
- jsp要经过翻译、编译,然后才变成一个class
- 类加载器的特性:只要是已加载的类,就不会再加载
- 热部署的实现思路是:
jsp的类加载器设计成一次性的,一旦检测到jsp文件发生改变,就会卸载目前的jsp类加载器,
然后再去创建一个新的jsp类加载器,加载新的jsp的class