当前位置: 首页 > 工具软件 > JarScan > 使用案例 >

tomcat配置属性之jarScanner和jarScanFilter

诸葛乐逸
2023-12-01

       首先先给出tomcat官网关于该属性的连接jarScanner的链接和jarScanFilter的链接。

       简单说明一下这两个配置项,这两个配置项的作用是在服务器加载应用的时候扫描jar包的,仅仅在启动后第一次加载该应用的时候扫描一次,当加载多个应用的时候每个应用第一次加载的时候分别扫描一次jar文件。对一些属性值做下简单的说明:

首先是jarScannner的:

  • scanAllDirectories:如果true,还会检查扫描路径下所有的文件夹,以查看这些文件夹是否是解压后的JAR文件。默认是false。Tomcat是通过查找一个文件夹下面是否有META-INF子文件夹来确定这个文件夹是否是解压后的JAR文件的。仅当存在META-INF子文件夹时,才假定该文件夹是解压后的JAR文件。
  • scanAllFiles:如果true,将检查路径中找到的任何文件以查看它们是否是Jar文件,而不是依赖于文件扩展名.jar。默认是false。
  • scanClassPath:如果true,除了会扫描Web应用程序之外,还将扫描包括share和common类加载器以及系统类路径(但不包括引导类路径)。默认是true。
  • scanBootstrapClassPath:如果scanClassPath是true,该属性也为true,那么还将扫描bootstrap类路径下是否有JAR文件。默认是false。

然后是jarScanFilter的:

  • defaultTldScan:控制在扫描TLD文件时默认是否扫描或跳过某些JAR文件。如果true,当JAR的名称与tldSkip的值或任何tldScan的值都不匹配时,会扫描JAR 。如果false,当JAR的名称与任何tldScan属性的值匹配且没有和tldSkip的值匹配时,将扫描JAR 。默认值为true
  • tldSkip:扫描TLD文件时要跳过JAR文件名列表,用逗号分隔。如果未指定,则从tomcat.util.scan.StandardJarScanFilter.jarsToSkip 系统属性获取默认值。
  • tldScan:扫描TLD文件时要扫描的JAR文件名列表,用逗号分隔。如果未指定,则从tomcat.util.scan.StandardJarScanFilter.jarsToScan 系统属性获取默认值。

再来看看使用:

Jar Scan Filter元素可以嵌套在 Jar Scanner组件中。其定义在Context标签里面,context标签可以写在context.xml中。可以按照如下形式:

<Context>
  ...
  <JarScanner>
    <JarScanFilter
        pluggabilityScan="${tomcat.util.scan.StandardJarScanFilter.jarsToScan},
                       my_pluggable_feature.jar"/>
  </JarScanner>
  ...
</Context>

下面再来看下代码:

tomcat定义了一个JarScanner接口和一个JarScanFilter接口,这两个接口分别定义如下:

JarScanner接口:

public interface JarScanner {
    public void scan(JarScanType scanType, ServletContext context,
            JarScannerCallback callback);
    public JarScanFilter getJarScanFilter();
    public void setJarScanFilter(JarScanFilter jarScanFilter);
}

JarScanFilter接口

public interface JarScanFilter {
    boolean check(JarScanType jarScanType, String jarName);
}

这表明JarScanFilter是定义在JarScanner中的。和上面的JarScanFilter标签嵌套在JarScanner中相符。

tomcat默认实现了两个标准实现类来实现上面的两个接口,分别是org.apache.tomcat.util.scan.StandardJarScanner和org.apache.tomcat.util.scan.StandardJarScanFilter。

 类似资料: