【问题标题】:Serving static resources from external directories从外部目录提供静态资源
【发布时间】:2026-02-11 03:00:01
【问题描述】:

从应用程序外部的目录中提供图像或任何其他静态资源(如 css 和 javascript)的正确方法应该是什么?

我曾经在 Spring MVC 应用程序中通过在 xml 配置中使用 mvc:resources 元素,或者通过扩展 WebMvcConfigurerAdapter 并在 Java 配置中添加相应的资源处理程序,然后指定资源所在的文件系统路径来非常容易地实现这一点已存储。

记住,据我所知,jhipster 不使用 Spring MVC,我怎么能实现这个功能?

我尝试在 jhipster 中配置 Spring MVC,但引入 dispatcherServlet 只会导致应用程序崩溃(正如预期的那样,对吗?),我仍然掌握 Angular,所以我不确定解决方案是否有效那样。

提前致谢。

更新:

在下面添加了我的解决方案。

【问题讨论】:

    标签: jhipster


    【解决方案1】:

    对于开发人员,只需将文件放在 /src/main/webapp/yourdir/ 中,它就应该被提供(假设它是一个公共静态资源)。对于生产,您需要将其添加到 config/WebConfigurer.java 中的静态过滤器:

    /**
     * Initializes the static resources production Filter.
     */
    private void initStaticResourcesProductionFilter(ServletContext servletContext,
                                                     EnumSet<DispatcherType> disps) {
    
        log.debug("Registering static resources production Filter");
        FilterRegistration.Dynamic staticResourcesProductionFilter =
                servletContext.addFilter("staticResourcesProductionFilter",
                        new StaticResourcesProductionFilter());
    
        staticResourcesProductionFilter.addMappingForUrlPatterns(disps, true, "/");
        staticResourcesProductionFilter.addMappingForUrlPatterns(disps, true, "/index.html");
        staticResourcesProductionFilter.addMappingForUrlPatterns(disps, true, "/images/*");
        staticResourcesProductionFilter.addMappingForUrlPatterns(disps, true, "/fonts/*");
        staticResourcesProductionFilter.addMappingForUrlPatterns(disps, true, "/scripts/*");
        staticResourcesProductionFilter.addMappingForUrlPatterns(disps, true, "/styles/*");
        staticResourcesProductionFilter.addMappingForUrlPatterns(disps, true, "/views/*");
        staticResourcesProductionFilter.setAsyncSupported(true);
    } 
    

    【讨论】:

    • 我的问题是我正在使用用户上传的图像存储库,该存储库位于文件系统的特定路径中,因此我无法移动它。这就是我需要指出它的原因,就像我以前使用 Spring MVC 一样。
    【解决方案2】:

    感谢 Spring Boot 的魔力,现在我知道你可以通过扩展 WebMvcConfigurerAdapter 来配置 MVC 相关的东西。所以我创建了自己的配置类来覆盖相应的方法,在本例中为addResourceHandlers,它就像一个魅力。

    请注意,@EnableWebMvc 是不需要的,否则你会弄乱 JHipster 前端。

    【讨论】: