Tomcat 11.0忽略metadata-complete="true"?Servlet 6.1配置咨询
问题
我的应用未使用任何Servlet注解,因此希望跳过注解扫描,但Tomcat 11.0似乎忽略了web.xml中设置的metadata-complete="true"属性。针对Servlet 6.1版本是否需要采用不同的处理方式?这是Tomcat 11.0的Bug吗?
我的WEB-INF/web.xml开头配置如下:
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee web-app_6_1.xsd" version="6.1" metadata-complete="true">
日志输出如下:
INFORMATION [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/11.0.0] INFORMATION [main] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [foobar.war] FEIN [main] org.apache.jasper.servlet.TldScanner.scanResourcePaths No TLD files were found in resource path [/WEB-INF/]. FEIN [main] org.apache.jasper.servlet.TldScanner$TldScannerCallback.scan No TLD files were found in [file:.... ... INFORMATION [main] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
解答
- 首先明确:
metadata-complete="true"的作用是跳过Servlet注解扫描,而你日志里的内容是JSP相关的TLD(标签库描述符)扫描,这两者是完全独立的机制,Tomcat并没有忽略metadata-complete属性。 - Servlet 6.1(对应Tomcat 11)中
metadata-complete的行为没有变化,只要设置为true,容器就不会扫描类路径中的Servlet注解(比如@WebServlet、@WebFilter等),你的应用已经达到了跳过注解扫描的目的。 - 日志里的TLD扫描是Jasper(Tomcat的JSP引擎)的默认行为,和
metadata-complete无关。如果想关闭或优化TLD扫描,可以通过以下方式:- 在Tomcat的
context.xml中配置JarScanner,跳过不必要的JAR扫描:
或者更精细地排除特定JAR:<JarScanner scanClassPath="false" /><JarScanner> <JarScanFilter defaultPluggabilityScan="false" /> </JarScanner> - 如果你的应用不需要JSP或自定义标签库,可以直接禁用JSP引擎,在
web.xml中添加:<jsp-config> <jsp-property-group> <url-pattern>*.jsp</url-pattern> <page-encoding>UTF-8</page-encoding> <scripting-invalid>true</scripting-invalid> </jsp-property-group> </jsp-config>
- 在Tomcat的
- 这不是Tomcat 11的Bug,只是混淆了注解扫描和TLD扫描的不同作用域。
内容的提问来源于stack exchange,提问作者Horcrux7
相关产品推荐
相关产品推荐

