2009-09-28 105 views
3

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

+0

是否有分配只是你要扫描的特定罐的方法吗? – 2011-11-09 21:36:05

+0

不是我所知道的。 – 2011-11-11 02:33:11

回答

9

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

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

然而,在JAR文件中定义你的顶级域名不会没有扫描的JAR工作。您必须在WEB-INF中定义所有TLD。

+0

谢谢!这很好地诀窍! – 2009-09-29 15:32:25

+0

似乎是一个Tomcat 7属性。 – Zalumon 2017-08-08 12:12:40

1

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

+0

这是Tomcat 7中的新功能,对吧?就我而言,我仍在使用Tomcat 6,但对于Tomcat 7用户来说,这看起来是一个不错的选择。 – 2012-04-13 13:52:56

+0

是的。不适用于Tomcat 6.属性显示在Tomcat 7中。 – 2012-04-13 14:18:27

7

我对同样的问题感到困惑。查看Tomcat 7.0.40的源代码,通过设置'processTlds = false'来避免罐子扫描是可能的,它们仍将被扫描以查找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目录下,不育ur .war

5

在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

相关问题