是否可以在Tomcat中关闭taglib扫描?

时间:2009-09-28 22:18:52

标签: java tomcat taglib

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

4 个答案:

答案 0 :(得分:11)

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

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

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

答案 1 :(得分:8)

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

还有两个选项:

在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

答案 2 :(得分:8)

在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

答案 3 :(得分:1)

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