7

启动时,Tomcat 会递归地扫描 WEB-INF 目录中的 TLD(标签库描述符)文件。因此,如果一个 webapp 在该目录下有很多文件,它会减慢启动过程。有谁知道在这种情况下是否有办法完全关闭扫描,或者至少提供一个过滤器来缩小搜索范围?

4

4 回答 4

14

您可以在上下文中添加 processTlds 属性,

  <Context processTlds="false" ... />

但是,如果不扫描 JAR,您在 JAR 文件中定义的 TLD 将无法工作。您必须在 WEB-INF 中定义所有 TLD。

于 2009-09-28T23:46:52.967 回答
10

我对同样的问题感到困惑。查看 Tomcat 7.0.40 的源代码,无法通过设置 'processTlds=false' 来避免 jar 扫描,它们仍然会被扫描 Web 片段(ContextConfig.processJarsForWebFragments())。

剩下2个选项:

在 TOMCAT_HOME/conf/catalina.properties 中设置属性

org.apache.catalina.startup.ContextConfig.jarsToSkip=*.jar

用您自己的实现替换 StandardJarScanner,例如空一个并从 my.war/META-INF/context.xml 引用它:

<Context processTlds="false">
    <JarScanner className="org.my.tomcat.NullJarScanner"/>
</Context>

在后一种情况下,您需要确保 NullJarScanner 类在 tomcat 的 lib 目录中可用,而不是在您的 .war

于 2013-06-28T20:05:27.780 回答
10

在 Tomcat 8 上,可以通过将META-INF\context.xml以下配置添加到您的 WAR 文件中来解决此问题。无需更改全局 Tomcat 配置。

<?xml version="1.0" encoding="UTF-8"?>
<Context>
    <JarScanner>
        <JarScanFilter tldSkip="*.*"/>
    </JarScanner>
</Context>

相关文档可在此处获得:http: //tomcat.apache.org/tomcat-8.0-doc/config/jar-scan-filter.html

于 2017-02-21T11:28:58.867 回答
1

作为替代方案(如果您仍然喜欢扫描一些 JAR),您可以将新值附加到“{TOMCAT_HOME}/conf/catalina.properties”中的“tomcat.util.scan.DefaultJarScanner.jarsToSkip”属性。

于 2012-04-12T17:42:06.277 回答