2009-09-28 26 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

相關問題