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

Mat*_*ell 6 java tomcat taglib

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

ZZ *_*der 12

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

  <Context processTlds="false" ... />
Run Code Online (Sandbox Code Playgroud)

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


Igo*_*nko 8

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

剩下2个选项:

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

org.apache.catalina.startup.ContextConfig.jarsToSkip=*.jar
Run Code Online (Sandbox Code Playgroud)

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

<Context processTlds="false">
    <JarScanner className="org.my.tomcat.NullJarScanner"/>
</Context>
Run Code Online (Sandbox Code Playgroud)

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


Ser*_*gey 8

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

<?xml version="1.0" encoding="UTF-8"?>
<Context>
    <JarScanner>
        <JarScanFilter tldSkip="*.*"/>
    </JarScanner>
</Context>
Run Code Online (Sandbox Code Playgroud)

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