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/");
    }
}
如果我知道名字,我现在可以访问单个图像.
示例: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");
    }
}
与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");
                }
            });
        }
    };
}
感谢安迪·威尔金森。
| 归档时间: | 
 | 
| 查看次数: | 3338 次 | 
| 最近记录: |