Spring-boot应用程序的嵌入式Tomcat目录列表

San*_*kar 5 java spring tomcat spring-mvc spring-boot

我有一个嵌入式Tomcat的Spring启动应用程序.我想通过tomcat目录列表从不同的位置公开一些图像文件和文件夹.所以我在我的配置文件中添加了以下名称

public class AppConfig extends WebMvcConfigurerAdapter

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/images/**").addResourceLocations("file:///xxx/yyy/images/");
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我知道名字,我现在可以访问单个图像.

示例:localhost:8080/images/file.jpg.

但由于目录列表默认为false,我无法通过"localhost:8080/images /"访问图像列表以了解所有可用图像.

我尝试了下面的选项来添加列表,但是没有用.

public class MyApplication implements ServletContextInitializer{

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        servletContext.setInitParameter("listings", "true");
    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ren 0

与SpringBoot 嵌入式 Tomcat JSPServlet 选项相同的方式,您可以使用 来EmbeddedServletContainerCustomizer @Bean查找默认 servlet 并配置其初始化参数。

@Bean
public EmbeddedServletContainerCustomizer customizer() {
    return new EmbeddedServletContainerCustomizer() {

        @Override
        public void customize(ConfigurableEmbeddedServletContainer container) {
            if (container instanceof TomcatEmbeddedServletContainerFactory) {
                customizeTomcat((TomcatEmbeddedServletContainerFactory) container);
            }
        }

        private void customizeTomcat(TomcatEmbeddedServletContainerFactory tomcat) {
            tomcat.addContextCustomizers(new TomcatContextCustomizer() {

                @Override
                public void customize(Context context) {
                    Wrapper defServlet = (Wrapper) context.findChild("default");
                    defServlet.addInitParameter("listings", "true");
                }
            });
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

感谢安迪·威尔金森。