我们有一个应用程序不断从我们的第 3 方库加载 ServletContainerInitializer 实例。
一个实例是 JerseyServletContainerInitializer,另一个实例是 SpringServletContainerInitializer。 Jersey 和 Spring 中的这些类似乎“接管”了我们的 servlet 上下文,与我们的映射和过滤器等打乱。
我们确实需要显式配置 servlet 容器的 web.xml,而这种自动扫描让我们发疯。通过简单地在 pom.xml 中引入依赖项,我们的运行时 ServletContext 配置(例如 Servlet/Filters/ContextListeners)就会发生变化,因为 servlet 容器在类路径上找到这些库。
有没有办法使用 Servlet 3 但禁用其烦人的自动类路径扫描“功能”?
From https://wiki.apache.org/tomcat/HowTo/FasterStartUp
有两个选项可以在 WEB-INF/web.xml 中指定
文件:
- 在 元素上设置metadata-complete="true" 属性。
- 添加一个空的 元素。
设置metadata-complete=“true”会禁用扫描您的网络
应用程序及其使用注释的类库
定义 Web 应用程序的组件(Servlet 等)。这
元数据完成选项不足以禁用所有注释
扫描。如果有带有@HandlesTypes注解的SCI,Tomcat
必须扫描您的应用程序以查找使用注释或的类
该注释中指定的接口。
元素指定哪个 Web 片段 JAR
(根据其 WEB-INF/web-fragment.xml 文件中的名称)有
扫描 SCI、片段和注释。一个空的
元素配置不扫描任何内容。
在 Tomcat 7 中,绝对排序选项会影响以下两者的发现
Web 应用程序提供的 SCI 和容器提供的 SCI
(即通过 $CATALINA_HOME/lib 中的库)。在 Tomcat 8 中该选项
仅影响 Web 应用程序,而容器提供的
无论绝对顺序如何,SCI 总是会被发现。在这样的
如果单独使用绝对排序选项并不能阻止扫描
注释,但要扫描的 JAR 列表将为空,并且
这样扫描就会很快完成。班级在
无论绝对顺序如何,始终都会扫描 WEB-INF/类。
不扫描Web应用程序资源和TLD扫描
受这些选项的影响。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)