Spring boot 嵌入式servlet容器在Spring引导中不处理META-INF/资源
我的WAR应用程序使用非Spring库(用于JSF)。该库使用Spring boot 嵌入式servlet容器在Spring引导中不处理META-INF/资源,spring-boot,Spring Boot,我的WAR应用程序使用非Spring库(用于JSF)。该库使用servletContext.getResource(“page.html”)进行初始化page.html位于WEB-INF/lib的JAR中,打包为META-INF/resources/page.html 当我在servlet容器上部署WAR时,效果非常好。但当我将应用程序作为可执行WAR运行时,它不起作用,因为嵌入式servlet容器不扫描类路径META-INF/资源 例如,不使用Undertow类路径资源管理器: private
servletContext.getResource(“page.html”)
进行初始化page.html
位于WEB-INF/lib的JAR中,打包为META-INF/resources/page.html
当我在servlet容器上部署WAR时,效果非常好。但当我将应用程序作为可执行WAR运行时,它不起作用,因为嵌入式servlet容器不扫描类路径META-INF/资源
例如,不使用Undertow类路径资源管理器:
private ResourceManager getDocumentRootResourceManager() {
File root = getCanonicalDocumentRoot();
if (root.isDirectory()) {
return new FileResourceManager(root, 0);
}
if (root.isFile()) {
return new JarResourceManager(root);
}
return ResourceManager.EMPTY_RESOURCE_MANAGER;
}
问题:为什么嵌入式servlet容器忽略了META-INF/resources
?使可执行Servlet3.0应用程序成为一个问题
类似问题:
我通过以下配置解决了问题:
@Bean
public UndertowEmbeddedServletContainerFactory embeddedServletContainerFactory() {
UndertowEmbeddedServletContainerFactory factory =
new UndertowEmbeddedServletContainerFactory();
factory.addDeploymentInfoCustomizers(new UndertowDeploymentInfoCustomizer() {
@Override
public void customize(DeploymentInfo deploymentInfo) {
deploymentInfo.setResourceManager(
new ClassPathResourceManager(deploymentInfo.getClassLoader(),
"META-INF/resources"));
});
return factory;
}
一般来说,我认为嵌入式web容器的行为记录不足。Spring Boot开发人员很高兴Embdeded web容器为应用程序提供了一些功能子集,迁移现有应用程序的人希望embedded container提供常规容器的所有功能。例如,ServletContainerInitializers在embedded中被忽略:我经常使用spring boot,但以前还没有听说过可执行war。我想知道这是如何得到支持的。