正统的类加载器架构 一个健全的Web服务器,需要解决如下问题: - 部署在同一服务器上的两个Web应用程序所使用的Java类库可以实现相互隔离 - 部署在同一服务器上的两个Web应用程序所使用的Java类库可以互相共享 - 服务器需要尽可能保证自身的安全不受部署的Web应用程序影响 - 支持JSP应用的Web服务器,十有八九都要支持HotSwap功能 提供好几个有不同含义的ClassPath路径供用户存放第三方类库 - /common。可被Tomcat和所有的Web程序共同使用 - /server。可被Tomcat使用,对所有Web程序不可见 - /shared。可被所有Web程序使用,但对Tomcat自己不可见 - /WebApp/WEB-INF。仅仅可被该Web应用程序使用,对Tomcat和其他Web程序不可见 Tomcat定义了多个类加载器 ![[Pasted image 20230613181834.png]] Common、Catalina(Server类加载器)、Shared、WebApp分别对应四个加载类库 每一个Web应用程序对应一个WebApp类加载器,每一个JSP文件对应一个JasperLoader Catalin类加载器和Shared类加载器加载的类型相互隔离,WebApp类加载器可以使用Shared类加载器加载的类,但是每个WebApp类加载器实例之间相互隔离,JasperLoader加载方位仅仅时JSP文件编译出的那一个Class文件,存在的目的就是为了被丢弃,当服务器检测到JSP文件修改时,会提黄目前的JasperLoader实例,并创建一个新的加载器实现HotSwap功能 Tomcat6之后版本简化了结构,没有Catalina和Shared类加载器,用Common替代,相应的文件夹也被合并为/lib目录