asp网站如何虚拟发布,做网站jw100,网站建设报价方案.xls,手机免费个人网站建站文章目录 一、双亲委派机制二、分析1、Tomcat需要隔离性2、Tomcat需要热替换3、打破双亲委派机制 三、Tomcat类加载器1、拓展类加载器2、工作原理 四、总结 一、双亲委派机制
首先了解下双亲委派机制#xff0c;大致过程如下#xff1a; 简单来说#xff0c;就是加载class… 文章目录 一、双亲委派机制二、分析1、Tomcat需要隔离性2、Tomcat需要热替换3、打破双亲委派机制 三、Tomcat类加载器1、拓展类加载器2、工作原理 四、总结 一、双亲委派机制
首先了解下双亲委派机制大致过程如下 简单来说就是加载class文件时委托上级加载器去加载依次传递到顶层类加载器加载过直接返回没加载过尝试让下级进行加载依次传递回去;
保证每个类只会被加载一次避免重复加载。
二、分析
1、Tomcat需要隔离性
如果使用默认的类加载器是无法加载两个相同类库不同版本的web容器部署多个应用程序不同应用可能依赖相同类库不同版本需要保证每个应用程序类独立、相互隔离部署在同个web容器中的相同类库的相同版本可以共享否则会有重复的类库被加载进JVMweb容器也有自己的类库不能和应用程序的类库混淆需要相互隔离
2、Tomcat需要热替换
jsp 文件其实也就是class文件那么如果修改了但类名还是一样类加载器会直接取方法区中已经存在的修改后的jsp是不会重新加载的
3、打破双亲委派机制
OSGI是基于Java语言的动态模块化规范类加载器之间是网状结构更加灵活但是也更复杂JNDI服务使用线程上线文类加载器父类加载器去使用子类加载器
三、Tomcat类加载器
1、拓展类加载器 说明如下
CommonClassLoadertomcat最基本的类加载器加载路径中的class可以被tomcat和各个webapp访问CatalinaClassLoadertomcat私有的类加载器webapp不能访问其加载路径下的class即对webapp不可见SharedClassLoader各个webapp共享的类加载器对tomcat不可见WebappClassLoaderwebapp私有的类加载器只对当前webapp可见 每一个web应用程序对应一个WebappClassLoader每一个jsp文件对应一个JspClassLoader所以这两个类加载器有多个实例
2、工作原理
a. CommonClassLoader能加载的类都可以被Catalina ClassLoader和SharedClassLoader使用从而实现了公有类库的共用b. CatalinaClassLoader和SharedClassLoader自己能加载的类则与对方相互隔离c. WebAppClassLoader可以使用SharedClassLoader加载到的类但各个WebAppClassLoader实例之间相互隔离多个WebAppClassLoader是同级关系d. 而JasperLoader的加载范围仅仅是这个JSP文件所编译出来的那一个.Class文件它出现的目的就是为了被丢弃当Web容器检测到JSP文件被修改时会替换掉目前的JasperLoader的实例并通过再建立一个新的Jsp类加载器来实现JSP文件的HotSwap功能
tomcat目录结构与上面的类加载器对应
/common/*/server/*/shared/*/WEB-INF/*
默认情况下conf目录下的catalina.properties文件没有指定server.loader以及shared.loader所以tomcat没有建立CatalinaClassLoader和SharedClassLoader的实例这两个都会使用CommonClassLoader来代替。Tomcat6之后把common、shared、server目录合成了一个lib目录。所以在我们的服务器里看不到common、shared、server目录
四、总结
Tomcat重写类加载器的主要目的是为了实现Web应用程序的隔离和热部署。 隔离性Tomcat使用自定义的类加载器来加载每个Web应用程序的类。这样可以确保每个Web应用程序在运行时具有自己的类加载器实例从而实现了应用程序之间的隔离。这样一来不同的Web应用程序可以使用相同的类名但它们的类加载器会将它们加载到各自的命名空间中避免了类冲突的问题。 热部署Tomcat的类加载器还支持热部署功能即在应用程序运行时动态加载和卸载类。当Web应用程序的代码或资源发生变化时Tomcat可以重新加载这些变化的部分而无需重启整个服务器。这样可以提高开发和调试的效率。
通过重写类加载器Tomcat能够实现更灵活的类加载和隔离机制使得Web应用程序的部署和维护更加方便和高效。