2011-03-28 10 views
23

, 응용 프로그램 컨텍스트 디렉터리 외부에있는 정적 콘텐츠 (이미지)를 제공해야합니다. 전반적인 애플리케이션 아키텍처에서는 Tomcat을 사용하여이 작업을 수행해야합니다. 응용 프로그램 URL과 디렉토리 내용 간의 매핑을 구성하기 위해 Spring의 <mvc:resources>에서 도움이 될 수 있다고 생각했습니다. 그러나 AFAIK는 mapping 속성은 컨텍스트 상대 또는 클래스 경로 매핑 만 처리합니다. 따라서 내가 무엇을 사용하고 싶습니다 :스프링 : 웹 응용 프로그램에서 컨텍스트 루트 외부에 정적 리소스를 제공하는

<mvc:resources location="/images/**" mapping="/absolute/path/to/image/dir"/> 

이 작동하지 않습니다. 간단한 파일 전송 서블릿을 쓰는 것을 피하고 싶습니다. 기존 스프링 기반 솔루션/해결 방법에 대한 조언을 누군가 나에게 줄 수 있다면 기쁠 것입니다.

감사합니다.

외부에서 자원을 제공 할 수

답변

33

<mvc:resources> 호머, 당신은 Spring resource path syntax 평소 사용해야합니다

코드가 있어야한다

<mvc:resources mapping="/images/**" location="file:/absolute/path/to/image/dir/"/> 
+1

그럼 내가 잘못 이해 한 것 같습니다. 사실 나는'file :'접두사를 사용해 보았습니다. 그리고 정적 리소스에 대한 요청을 추적 할 때, Spring에서 슬래시 앞에 붙는 것으로 나타났습니다. 결과적으로'/ file :/absolute/path/to/image/dir'이 매핑됩니다. 말할 필요도없이 이것은 존재하지 않는 컨텍스트 루트에서 someting에 매핑을 시도합니다. 나는 너의 제안을 사용하지 못한다. – Homer

+0

@Homer :'mapping'을'location'과 혼동했습니다. 업데이트를보십시오. – axtavt

+3

흠. 게시하기 전에 예제를 다시 읽어야합니다 :(. 나는'mapping'과'location' 속성을 혼합했습니다. 부끄럽습니다. 답장을 보내 주셔서 감사합니다. 내가 잘못한 점을 지적하고, 실수로. 예상대로 작동합니다. – Homer

2

이 하나 더 간단한 보정을

<mvc:resources mapping="/images/**" location="file:/absolute/path/to/image/dir/"/>

차이점을 확인 했습니까? 절대 경로의 끝에 '/'를 넣어야합니다.

하거나 자바 구성 나를 위해 일하는

@Override 
public void addResourceHandlers(ResourceHandlerRegistry registry) { 
    String rootPath = System.getProperty("user.home"); 
    String imagePath = "file:"+rootPath + File.separator + "tmpFiles/"; 
    System.out.println(imagePath); 
    registry.addResourceHandler("/resources/**").addResourceLocations("resources/"); 
    registry.addResourceHandler("/tmpFiles/**").addResourceLocations(imagePath); 
} 

그에게 사용할 수 있습니다.

관련 문제