복붙노트

[SPRING] 스프링 부트 응용 프로그램을위한 임베디드 Tomcat 디렉토리 목록

SPRING

스프링 부트 응용 프로그램을위한 임베디드 Tomcat 디렉토리 목록

Tomcat이 내장 된 스프링 부트 응용 프로그램이 있습니다. 나는 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");
    }
}

해결법

  1. ==============================

    1.SpringBoot Embedded Tomcat JSPServlet 옵션과 동일한 방법으로 EmbeddedServletContainerCustomizer @Bean을 사용하여 기본 서블릿을 검색하고 init 매개 변수를 구성 할 수 있습니다.

    SpringBoot Embedded Tomcat JSPServlet 옵션과 동일한 방법으로 EmbeddedServletContainerCustomizer @Bean을 사용하여 기본 서블릿을 검색하고 init 매개 변수를 구성 할 수 있습니다.

    @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");
                    }
                });
            }
        };
    }
    

    Andy Wilkinson에게 명성이 있습니다.

  2. ==============================

    2.springboot / **는 ResourceHttpRequestHandler에 매핑됩니다. 호출이 DefaultServlet에 위임되어 결코 목록이 적용되지 않습니다. Mark의 솔루션을 두 가지 더 조정해야만 작동 할 수있었습니다.

    springboot / **는 ResourceHttpRequestHandler에 매핑됩니다. 호출이 DefaultServlet에 위임되어 결코 목록이 적용되지 않습니다. Mark의 솔루션을 두 가지 더 조정해야만 작동 할 수있었습니다.

    
        Deployment folder structure
        /myhome/mytest
        ----myapp.jar
        ----/tomcat/webapps
        ----/static
        --------All static files go here
    
        application.yml
        server :
         tomcat :
          basedir : tomcat
    
        Current working dir to run the app /myhome/mytest
    
        url to test : http://localhost:8080/static
    
  3. from https://stackoverflow.com/questions/35004870/embedded-tomcat-directory-listing-for-spring-boot-application by cc-by-sa and MIT license