当前位置: 首页 > 知识库问答 >
问题:

Embedded servlet容器不处理Spring Boot中的元INF/资源

苏运良
2023-03-14

我WAR应用程序使用了非Spring库(用于JSF)。库使用servletContext.getResource(“page.html”)初始化。page.html位于WEB-INF/lib中的一个JAR中,打包为meta-inf/resources/page.html

例如,对于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;
}

https://github.com/spring-projects/spring-boot/blob/master/spring-boot/src/main/java/org/springframework/boot/context/embedd/undertow/undertowembeddedservletcontainerfactory.java#L466

该提问了:为什么嵌入式servlet容器忽略meta-inf/resources?制作可执行的Servlet3.0应用程序是一个问题。

嵌入式Tomcat、可执行jar、ServletContext.getRealPath()

https://github.com/spring-projects/spring-boot/issues/4218

共有1个答案

韩禄
2023-03-14

我用以下配置解决了我的问题:

@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开发人员很高兴嵌入式web容器为应用程序提供一些功能子集,迁移现有应用程序的人希望嵌入式容器提供常规容器的所有功能。例如,ServletContainerInitializer在Embedded:https://github.com/spring-projects/spring-boot/issues/321中被忽略

 类似资料:
  • ValidationExceptionHandler.java 当我运行我的代码并传递无效的电子邮件地址时,我会得到以下异常。从不执行HandleConstraintVilvation中的代码。异常中返回的http状态是500,但我想返回400。你知道我怎么才能做到吗?

  • 当您定义 Pod 的时候可以选择为每个容器指定需要的 CPU 和内存(RAM)大小。当为容器指定了资源请求后,调度器就能够更好的判断出将容器调度到哪个节点上。如果您还为容器指定了资源限制,节点上的资源就可以按照指定的方式做竞争。 资源类型 CPU 和 memory 都是 资源类型。资源类型具有基本单位。CPU 的单位是 core,memory 的单位是 byte。 CPU和内存统称为计算资源,也可

  • 我开始做一些类似资源类的东西,在那里我可以为我的应用程序保存我所有的文件,像图像和声音,但它变得非常混乱,所有的东西都在应用程序的乞求中加载。 这是包含所有内容的类:https://sourceb.in/s8rjgqqgss(头文件)https://sourceb.in/cjiq78hdov(cpp文件的一部分) 我很抱歉把它贴在不同的网站上,但正如你所看到的,它真的很乱,我也不知道如何让它变得更

  • 我在docker中有两个服务后端和前端(nodejs),它们通过nginx(也在docker中)处理。 Nginx配置: 我使用nginx location将所有请求代理给

  • 我试图处理这个错误(我在Android Studio更新东西之前从来没有过这个错误): 现在必须显式声明注释处理器。发现编译类路径上的以下依赖项包含注释处理器。请将它们添加到annotationProcessor配置中。-auto-value-1.4.jar(com.google.auto.value:auto-value:1.4)或者,设置android.defaultconfig.javaCo

  • 我正在尝试对我的Spring Boot应用程序进行dockerize。 这是我的docker作曲文件 我的dockerfile 我可以看到我的战争已经展开。在日志中我可以看到 在/usr/local/tomcat/webapps目录中,我可以看到这个根目录。war和根文件夹存在。我用以下命令启动docker: 当我访问localhost:8080Tomcat说Http状态404-未找到。 这里是执