前言
理解Tomcat的类加载机制有助于我们更好的理解容器是如何加载我们的web应用
0x01 类加载机制帮助容器解决了什么问题
问题1:部署在同一个服务器上的两个Web应用程序所使用的Java类库可以实现相互隔离
问题2:部署在同一个服务器上的两个Web应用程序所使用的Java类库可以共享
问题3:服务器需要尽可能保证自身安全不受部署的Web应用程序影响
服务器本身依赖的类库应该与应用程序依赖类库隔离
问题4:支持JSP应用的Web服务器,大多数需要支持HotSwap功能
JSP文件最终编译为Class文件才能由虚拟机执行,且修改概率高,需要修改后无需重启服务器、
0x02 Tomcat如何规划用户类库和类加载器
Tomcat中有四组可以存放Java类库的地方
/common/*
- 类库可被Tomcat和所有Web应用程序共同使用
CommonClassLoader加载器作为ApplicationClassLoader的子加载器
/server/*
- 类库可被Tomcat使用,对所有Web应用程序不可见
CatalinaClassLoader加载器作为CommonClassLoader的子加载器
/shared/*
- 类库可被所有Web应用程序使用,但对Tomcat自己不可见
SharedClassLoader作为CommonClassLoader的子加载器
/WEB-INF/*
- 类库仅仅可以被Web应用程序使用,对Tomcat和其他Web应用程序不可见
WebAppClassLoader作为SharedClassLoader的子加载器- 每个Web应用对应一个
WebAppClassLoader - 每个
WebAppClassLoader都有一个子加载器JspClassLoader
0x03 类加载器讲解
JspClassLoader
- 当服务器发现jsp文件被修改
- 替换掉当前的JspClassLoader的实例
- 再新建一个JspClassLoader的实例来完成HotSwap功能
0x04 注意事项
Tomcat6.x默认都是common类加载器
Tomcat6.x中只有指定了tomcat/conf/catalina.properties文件中的server.loader和share.loader才会启用这两个类加载器,默认采用common类处理器处理全部

本文深入探讨Tomcat的类加载机制,解释其如何解决类库隔离与共享问题,支持HotSwap功能,以及如何规划用户类库和类加载器。通过理解Tomcat的类加载器层级,更好地部署和管理Web应用。
1026

被折叠的 条评论
为什么被折叠?



