1

Java 웹 애플리케이션에 정적 컨텐츠 (이미지, CSS, JavaScript)를 제공하기 위해 WebSphere Application Server v7.0의 <enable-file-serving value="true" /> 기능을 사용하고 있습니다.WebSphere 7 : 정적 컨텐츠 파일 제공을위한 HTTP 헤더 수정

정적 콘텐츠 (예 : Cache-Control 또는 Expires 헤더 추가)의 HTTP 헤더를 수정하려면 어떻게해야하나요?

+0

안녕, 권장되는 방법은 IHS에 정적 콘텐츠를 이동 (IBM의 HTTP 서버 - 단지 아파치 2 실제로) WAS doind로드 균형 및 장애 조치 (failover) 앞에 필요할 것입니다. 확인 : http://www-01.ibm.com/software/webservers/httpservers/ –

+0

@MarcosMaia 이미 IHS를 사용하고 있지만 정적 컨텐츠를 추출/분배/동기화하여 웹 서버에서 제공하지 않기 때문에 어려움이 있습니다. 응용 프로그램 서버가 내 환경에서 두통의 가치가 없습니다. – user113215

답변

2

요청한 리소스의 URL을 기반으로 HTTP 헤더를 추가하기 위해 Filter을 작성했습니다. 여기에 단순화 된 버전입니다 :

CacheFilter.java

public class CacheFilter implements Filter { 
    private static long maxAge = 86400 * 30; // 30 days in seconds 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, 
      FilterChain chain) throws IOException, ServletException { 
     HttpServletResponse httpResponse = (HttpServletResponse) response; 
     httpResponse.setHeader("Cache-Control", "max-age=" + maxAge); 
     chain.doFilter(request, response); 
    } 

    @Override 
    public void init(FilterConfig filterConfig) throws ServletException { 
    } 

    @Override 
    public void destroy() { 
    } 
} 

web.xml을

<filter> 
    <filter-name>cache</filter-name> 
    <filter-class>com.example.CacheFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>cache</filter-name> 
    <url-pattern>*.png</url-pattern> 
</filter-mapping> 
<filter-mapping> 
    <filter-name>cache</filter-name> 
    <url-pattern>*.jpg</url-pattern> 
</filter-mapping> 
<filter-mapping> 
    <filter-name>cache</filter-name> 
    <url-pattern>*.gif</url-pattern> 
</filter-mapping> 
+0

사양 (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html)에 따르면 max-age는 밀리 초가 아닌 초 단위로 주어 지므로 private static long이어야합니다. maxAge = DateUtils.SECONDS_PER_DAY * 30; (그 상수가 존재하는지 나는 모른다) 그렇지 않으면 위대한 대답 – jambriz

+0

@jambriz 당신 말이 맞아. 저는 표준 단위가 밀리 초인 JavaScript에 익숙합니다. 나는 그 답을 바로 잡았다. – user113215

+0

나는 비슷한 것을하려고 노력하고있다. 하지만 작동하지 않습니다. 나는 여전히 no-cache를 본다. 내가 뭐라도 놓치고 있다고 생각하니? 나는 u와 똑같은 코드를 가지고있다. – webdev