作者回复: 线程上下文加载器其实是线程的一个私有数据,跟线程绑定的,这个线程做完启动Context组件的事情后,会被回收到线程池,之后被用来做其他事情,为了不影响其他事情,需要恢复之前的线程上下文加载器。
作者回复: 1和2你说的都准确。
CommonClassLoader对应<Tomcat>/common/*
CatalinaClassLoader对应 <Tomcat >/server/*
SharedClassLoader对应 <Tomcat >/shared/*
WebAppClassloader对应 <Tomcat >/webapps/<app>/WEB-INF/*目录
作者回复: 是的👍
作者回复: 对的
作者回复: 你可以在Tomcat conf目录下的Catalina.properties文件里配置各种类加载器的加载路径
作者回复: 它们是不同的类加载器实例,实例,实例,不同实例的类加载器加载的同名类是不同的
作者回复: 你可以在Tomcat conf目录下的catalina.properties文件中配置各加载器的加载路径
作者回复: 应该在Tomcat安装目录下建一个shared目录,把web应用共享的库放这个目录下
作者回复: 前面三个是加载器实例名,不是类名,你可以在BootStrap.java中找到
作者回复: Tomcat正是这样做的
作者回复: 就是你在使用Spring时需要导入的那一堆jar
作者回复: 两个不同的servlet可以被一个加载器加载
作者回复: 这好像是Tomcat在代码里写死的逻辑
作者回复: 这种情况就不是公共类库了,应该放到各Web应用的路径下去
作者回复: 线程上下文加载器本质是线程私有数据,需要显式拿出来,调getContextClassLoader拿