2013-05-07 5 views
1

내가 현재 스프링 MVC의 사용하여 내 웹 애플리케이션 내 정적 콘텐츠를 제공 동적으로 매핑 'MVC : 자원을 ...'태그를, 그래서처럼 내 서블릿 컨텍스트의 URL 매핑 및 자원 위치 설정 :정적 자원 위치는

<resources mapping="/resources/**" location="/resources/" /> 

이것은 훌륭하게 작동하지만, 내가하고 싶은 것은 애플리케이션에 동적으로 구성된 (데이터베이스에 저장된) 파일 시스템 경로에 "위치"를 설정할 수 있다는 것입니다. 이것이 가능한가? (스프링 컨텍스트가 초기화 된 후에이 작업이 필요하므로 서비스 호출 결과를 얻을 수는 있지만 작업을 수행 할 수있는 방법을 찾지 못했습니다.)

+0

이제는 보안상의 이유로 응용 프로그램 컨텍스트에 상대적인 파일 시스템 상대 경로 만 사용할 수 있다고 생각하지 않습니다. 이 ''태그는 css, js, icons (예 : 웹 앱 리소스. –

+0

고마워, Sotirios. 문서를 올바르게 읽는다면 'file : /'접두어를 사용하면 응용 프로그램 루트 외부에서 위치를 지정할 수있는 것처럼 보입니다. 여기서 문제는 내가 그 경로를 미리 알지 못한다는 것입니다. –

+0

이 클래스를 확장하는 프로그래밍 방식 구성을 사용하십시오 : http://static.springsource.org/spring/docs /3.1.x/javadoc-api/org/springframework/web/servlet/config/annotation/WebMvcConfigurerAdapter.html. –

답변

2

충분할 것

@Configuration 
@EnableWebMvc 
public class Bootstrap extends WebMvcConfigurerAdapter { 

    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     String path = "file:" + ...; // 'file:/' or 'file:' depending on how your path is formatted 
     registry.addResourceHandler("/resources/**").addResourceLocations(path); 
    } 

} 

path을 얻는 방법은 다른 이야기입니다. 어쩌면 @Autowired 또는 @Bean 데이터 소스를 사용하여 데이터베이스를 연결하고 경로를 쿼리 할 수 ​​있습니다.

+0

응용 프로그램 컨텍스트 초기화 후 (즉, 런타임에 자원 위치가 변경되는 경우)이 작업을 수행 할 수있는 방법이 있습니까? 감사! –

+0

나는 문법에 대한 더 나은 방법은 내가 런타임에 사용하는 빈에 ResourceHandlerRegistry를 주입 할 수 있는지 아닌지에 관한 것입니다 ...? –

+0

@BillMarkmann 당신이 할 수 있다는 것을 나는 모른다. 그렇게하기위한 해킹 일 수도있다. 이것은 서블릿 컨테이너가 앱을 초기화 할 때 수행된다. 런타임이란 무엇입니까? 설정 클래스에서 다른'@ Bean '을 가질 수 있습니다. 이 메소드 내부의 메소드를 사용할 수 있습니다. –