本篇对应《深入理解java虚拟机》第九章,通过几个案例的讲述来深入理解。
tomcat的类加载器
Tomcat一共有三组目录用来存放java的类库,然后还有一个是web程序自带的/WEB-INF/*目录,分别代表的含义:
- /common目录下,可以被tomcat和所有的web程序使用
- /server目录下,只有tomcat可以使用该类库
- /shared目录下,只有所有的web程序可以使用,Tomcat本身却无法使用。
- /WEB-INF下,仅仅该web应用程序可以使用。
Tomcat实现了多个类加载器来分别加载这些类库。当然不论什么类加载器必然是需要实现双亲委派模型的,于是就有下面这张图了。
其中每个类加载器对应各自目录下的类库的加载,而且一般会有多个WebApp类加载器和多个Jsp类加载器。Jsp加载器的目的是为了实现热更新,即当JSP发生变化的时候,直接换一个JsperLoader来加载最新的JSP文件。