1.6 KiB
1.6 KiB
正统的类加载器架构 一个健全的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定义了多个类加载器
!
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目录