2010-05-20 6 views
8

내 서블릿에서 이미지를 제공하고 있습니다. 응답 내용 유형은 image/jpeg입니다. 내 서블릿에서 요청한 이미지는 캐시되지 않습니다. 일반적으로 파일 이미지 요청처럼 캐쉬되도록하려면 어떻게해야합니까? 나는 Cache-Control : public을 설정하려했지만 아무 소용이 없었다. 예를 들어서블릿이 제공하는 이미지 캐싱

답변

-8

좋아요. 기본 헤더 필드가 캐싱을 활성화해야합니다. 다른 포럼에서 해결책을 찾았습니다. 분명히 응답에서 콘텐츠 길이를 명시 적으로 설정해야합니다. 이유는 궁금합니다. 나는 HttpServletResponse가 우리를 위해 그것을 할 것이라고 생각했다. 어쨌든, 그것은 매력처럼 작동했으며 이미지는 멋지게 캐싱되었습니다.

+4

아마도 답변을 찾은 포럼에 대한 링크를 제공 할 수 있습니까? – Stewart

2

, 당신은 1 개월을 캐시하려면 :

Calendar inOneMonth = Calendar.getInstance(); 
inOneMonth.add(Calendar.MONTH, 1); 

response.setDateHeader("Expires", inOneMonth.getTimeInMillis()); 

(이 예를 들어, *.jpg 패턴을 처리하는 Filter에)

그러나 이미지는 기본적으로 캐시해야 - 필터 및 구성을 점검하여 무언가가 캐시 매개 변수를 잘못 설정하지 않았는지 확인하십시오.

3

응답에 따라 ETag, Last-ModifiedExpires 헤더를 보내야합니다. ETag은 파일의 고유 식별자를 나타냅니다 (보통 filename, filesize 및 lastmodified timestamp의 조합을 기반으로 구성됨). Last-Modified은 파일의 최종 수정 된 시간 소인을 나타냅니다. Expires 헤더는 클라이언트가 파일을 캐시에 보관할 수있는 기간을 나타냅니다. 캐시가 만료되어 ETag 또는 Last-Modified을 사용할 수있는 경우 클라이언트는 파일을 갱신해야하는지 확인하기 위해 HEAD 요청을 보냅니다. 그렇지 않은 경우 Expires이 그에 따라 다시 연기됩니다.

현재 모든 (및 다운로드 이력서 및 자동 GZIP)이 처리하는 서블릿 예를 찾을 수 있습니다 FileServlet supporting resume and GZIP

22

Tomcat이 어떤 캐시 제어 헤더를 설정하지 않습니다 같은 용기에 정적 콘텐츠를 제공하는 기본 서블릿. 이를 위해 서블릿을 작성할 필요는 없습니다. 다음과 같은 필터를 작성하십시오.

public void doFilter(ServletRequest request, 
     ServletResponse response, 
     FilterChain chain) 
    throws IOException, ServletException { 

    long expiry = new Date().getTime() + cacheAge*1000; 

    HttpServletResponse httpResponse = (HttpServletResponse)response; 
    httpResponse.setDateHeader("Expires", expiry); 
    httpResponse.setHeader("Cache-Control", "max-age="+ cacheAge); 

    chain.doFilter(request, response); 

} 

캐시 제어를 추가하려면 필터를 web.xml의 리소스에 추가하기 만하면됩니다. 예 :

<filter> 
    <filter-name>CacheControl</filter-name> 
    <filter-class>filters.CacheControlFilter</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>CacheControl</filter-name> 
    <url-pattern>/images/*</url-pattern> 
</filter-mapping> 
+2

헤더는 밀리 초 단위로 작동하므로 'cacheAge'는 물건을 캐시 할 시간 (초)입니다. –

+2

이 필터는 CSS 및 자바 스크립트 파일에도 사용할 수 있습니까? – Shadow