一种web容器中的模块加载方法和装置制造方法及图纸

技术编号:18444598 阅读:35 留言:0更新日期:2018-07-14 10:15
本发明专利技术公开了一种web容器中的模块加载方法和装置,以解决现有的Web容器启动过程中类查找速度较慢的问题。该方法为,在第一web应用的web容器启动过程中,获取预先配置的所述第一web应用的各模块的黑名单和/或白名单;若获取到各模块的白名单,当通过通用类加载器查找类时,在白名单中包括的各模块中执行类查找和加载;若获取到各模块的黑名单、且未获取到白名单,当通过通用类加载器查找类时,遍历对应的通用类加载路径下的各个模块是否包括在所述黑名单中,若对应的通用类加载路径下的任一模块包括在所述黑名单中,则不针对所述任一模块执行类查找,这样能够黑白名单的模块配置类加载范围,减少类搜索耗时,提升启动速度。

A module loading method and device in a web container

The invention discloses a module loading method and a device in a web container, so as to solve the problem of slow lookup of classes in the startup process of the existing Web container. This method is to obtain the blacklist and / or white list of the modules of the pre configured first web application during the web container startup process of the first web application; if the white list of each module is obtained, the class lookup and loading of the modules included in the white list are executed when the class is found by the general class loader; To the blacklist of each module and not to get a white list, when the class is looked up by the general class loader, it is traversing whether each module under the corresponding universal class loading path is included in the blacklist, and if any of the modules under the corresponding universal class loading path are included in the blacklist, it is not aimed at any of the modules described. Execution class lookup, which can load the scope of the black-and-white list module configuration class, reduce class search time and speed up startup.

【技术实现步骤摘要】
一种web容器中的模块加载方法和装置
本专利技术涉及计算机
,尤其涉及一种web容器中的模块加载方法和装置。
技术介绍
当今互联网上充斥着无数的web网站,每一个Web网站就是一个Web应用,而每个应用都会部署在一个web容器上。Web容器实际上就是一个Java运行时(Runtime)环境,提供了应用的类加载(classloader)、JavaServletAPI的初始化及发布,并提供基于超文本传输协议(HyperTextTransferProtocol,HTTP)/安全套接字层超文本传输协议(HyperTextTransferProtocoloverSecureSocketLayer,HTTPS)的一系列访问接口。Web容器是一个基础的类(class)运行环境,每一段Java程序都会以.class形式发布,并归档在一系列jar、war、sar类型的软件包中。Web容器在启动时需要使用各自的类加载器,从自定义的类查找目录下查找需要的class文件及资源文件,经过class装载、链接、初始化后,Java虚拟机(JavaVirtualMachine,JVM)中将会缓存一份描述所有加载class的元信息结构,通过该结构可以获取class的结构信息,如:构造函数、属性、方法,进而JVM可以获取class实例并进行方法调用。Web容器的启动过程就是一系列类加载及类初始化的过程,在每个类初始化动作固定时如果最快的查找到类很大程度决定了容器的启动速度。JVM的类加载采用父类委托机制,如图1所示,当JVM需要加载一个class时,会按图1中的多层类加载关系,先从父classloader中加载,如果加载不到该class,会使用对应的子classloader继续到对应目录下进行class查找及加载。经过多年的互联网发展,很多Web应用的功能越来越全面,进而带来的系统复杂度也越来越高,每个系统都有几十甚至上百个子模块构建完成,部署在同一个Web容器内,系统涉及的模块不断增长,一个应用上线前需要集成数百个模块,应用WEB/lib目录下存在成百上千个jar包,包含了上万、几十万个class。当JVM进行类查找时,每个class都需要从这几百、几千个jar中遍历查找,速度很慢。假设系统启动使用了1000个class,一共有500个jar包,那会进行1000*500次的jar包遍历,而每个jar包内部还是几十、几百次的class查找。
技术实现思路
本专利技术实施例提供一种web容器中的模块加载方法和装置,以解决现有的web容器启动过程中类查找速度较慢的问题。第一方面,本专利技术实施例提供一种web容器中的模块加载方法,包括:在第一web应用的web容器启动过程中,获取预先配置的所述第一web应用的各模块的黑名单和/或白名单;若获取到所述第一web应用的各模块的白名单,当通过通用类加载器查找类时,在所述白名单中包括的各模块中执行类查找和加载;若获取到所述第一web应用的各模块的黑名单、且未获取到所述第一web应用的各模块的白名单,当通过通用类加载器查找类时,遍历对应的通用类加载路径下的各个模块是否包括在所述黑名单中,若对应的通用类加载路径下的任一模块包括在所述黑名单中,则不针对所述任一模块执行类查找。采用上述方案,由于通用类加载器中包含了大部分的web应用jar包,通过将web应用模块化,基于模块的黑白名单配置类加载范围,可以减少类搜索的耗时,提升启动速度。一种可能的设计中,所述方法还包括:在第一web应用的web容器启动过程中,在初始化类加载路径之后,执行类冲突检测得到检测结果,并给出日志提示。上述设计中,在初始化类加载路径之后,当发现类冲突时,可以通过日志进行记录并提示,可以提前发现类冲突,给出改进方向。一种可能的设计中,所述类冲突检测包括jar包的多版本检测和类的依赖检测。一种可能的设计中,在初始化类加载路径之后,执行类冲突检测得到检测结果,并给出日志提示,包括:执行类冲突检测得到检测结果,并给出日志提示,包括:遍历所述通用类加载路径下的所有jar包,识别名称相同的jar包和名称相同且版本不同的jar包,得到检测结果,并给日志提示;对通用类加载路径下的所有类文件进行字码解析,获取类依赖关系,并从所述通用类加载路径下查找所述依赖关系否存在,得到检测结果,并给出日志提示。上述设计中,通过jar包的冲突检测及类的依赖测,可以在web容器启动时提前发现class冲突及class缺失情况,避免问题遗漏到运行态。一种可能的设计中,所述方法还包括:若对应的通用类加载路径下的任一模块不包括在所述黑名单中,则针对所述任一模块执行类查找和加载。上述设计中,采用黑名单控制类加载范围,类加载时从黑名单范围外的模块中进行类及资源的查找,可以有效减少无效的类查找,提升web应用的启动速度。第二方面,本专利技术实施例一种web容器中的模块加载装置,包括:获取单元,用于在第一web应用的web容器启动过程中,获取预先配置的所述第一web应用的各模块的黑名单和/或白名单;处理单元,用于在获取到所述第一web应用的各模块的白名单,当通过通用类加载器查找类时,在所述白名单中包括的各模块中执行类查找和加载;所述处理单元,还用于在获取到所述第一web应用的各模块的黑名单、且未获取到所述第一web应用的各模块的白名单,当通过通用类加载器查找类时,遍历对应的通用类加载路径下的各个模块是否包括在所述黑名单中,若对应的通用类加载路径下的任一模块包括在所述黑名单中,则不针对所述任一模块执行类查找。一种可能的设计中,所述装置还包括:检测单元,用于在第一web应用的web容器启动过程中,在初始化类加载路径之后,执行类冲突检测得到检测结果,并给出日志提示。一种可能的设计中,所述类冲突检测包括jar包的多版本检测和类的依赖检测。一种可能的设计中,所述检测单元在执行类冲突检测得到检测结果,并给出日志提示时,具体用于:所述检测单元在执行类冲突检测得到检测结果,并给出日志提示时,具体用于:遍历所述通用类加载路径下的所有jar包,识别名称相同的jar包和名称相同且版本不同的jar包,得到检测结果,并给日志提示;对通用类加载路径下的所有类文件进行字码解析,获取类依赖关系,并从所述通用类加载路径下查找所述依赖关系否存在,得到检测结果,并给出日志提示。一种可能的设计中,所述处理单元还用于:若对应的通用类加载路径下的任一模块不包括在所述黑名单中,则针对所述任一模块执行类查找和加载。第三方面,本专利技术实施例提供一种设备,该设备包括处理器、存储器,其中,所述存储器中存有计算机可读程序,所述处理器通过运行所述存储器中的程序,实现第一方面涉及的web容器中的模块加载方法。第四方面,本专利技术实施例提供一种计算机存储介质,用于储存为上述第一方面所用的计算机软件指令,其包含用于执行上述由控制实现的方法所设计的程序。应理解,本专利技术实施例的第二至四方面与本专利技术实施例的第一方面的技术方案一致,各方面及对应的可实施的设计方式所取得的有益效果相似,不再赘述。附图说明图1为JVM的类加载机制示意图;图2、图3为类查找路径示意图;图4为web容器系统结构图;图5为本专利技术实施例中的web容器中的模块加载方法流程图;图6为模块保存文件本文档来自技高网
...

【技术保护点】
1.一种web容器中的模块加载方法,其特征在于,包括:在第一web应用的web容器启动过程中,获取预先配置的所述第一web应用的各模块的黑名单和/或白名单;若获取到所述第一web应用的各模块的白名单,当通过通用类加载器查找类时,在所述白名单中包括的各模块中执行类查找和加载;若获取到所述第一web应用的各模块的黑名单、且未获取到所述第一web应用的各模块的白名单,当通过通用类加载器查找类时,遍历对应的通用类加载路径下的各个模块是否包括在所述黑名单中,若对应的通用类加载路径下的任一模块包括在所述黑名单中,则不针对所述任一模块执行类查找。

【技术特征摘要】
1.一种web容器中的模块加载方法,其特征在于,包括:在第一web应用的web容器启动过程中,获取预先配置的所述第一web应用的各模块的黑名单和/或白名单;若获取到所述第一web应用的各模块的白名单,当通过通用类加载器查找类时,在所述白名单中包括的各模块中执行类查找和加载;若获取到所述第一web应用的各模块的黑名单、且未获取到所述第一web应用的各模块的白名单,当通过通用类加载器查找类时,遍历对应的通用类加载路径下的各个模块是否包括在所述黑名单中,若对应的通用类加载路径下的任一模块包括在所述黑名单中,则不针对所述任一模块执行类查找。2.如权利要求1所述的方法,其特征在于,所述方法还包括:在第一web应用的web容器启动过程中,在初始化类加载路径之后,执行类冲突检测得到检测结果,并给出日志提示。3.如权利要求2所述的方法,其特征在于,所述类冲突检测包括jar包的多版本检测和类的依赖检测。4.如权利要求3所述的方法,其特征在于,执行类冲突检测得到检测结果,并给出日志提示,包括:遍历所述通用类加载路径下的所有jar包,识别名称相同的jar包和名称相同且版本不同的jar包,得到检测结果,并给日志提示;对通用类加载路径下的所有类文件进行字码解析,获取类依赖关系,并从所述通用类加载路径下查找所述依赖关系否存在,得到检测结果,并给出日志提示。5.如权利要求1-4任一项所述的方法,其特征在于,所述方法还包括:若对应的通用类加载路径下的任一模块不包括在所述黑名单中,则针对所述任一模块执行类查找和加载。6.一种web容器中的模块加载装置,其特征在...

【专利技术属性】
技术研发人员:赵斌汪辉张良发周俊杰
申请(专利权)人:华为软件技术有限公司
类型:发明
国别省市:江苏,32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1