差分
このページの2つのバージョン間の差分を表示します。
| 次のリビジョン | 前のリビジョン | ||
| study:java:filter [2008/07/15 03:26] – created banana | study:java:filter [2010/07/07 12:15] (現在) – banana | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| ====== Java Servlet Filter ====== | ====== Java Servlet Filter ====== | ||
| + | servlet에 의해 동적으로 생성된 이미지를 클라이언트쪽에 캐싱시키는 방법을 소개한다. | ||
| + | Struts Framework를 사용하고 있다면, %%RequestProcessor%% class를 확장해서 요청처리전에 Cache-Control의 Response | ||
| + | header를 설정함으로써 캐쉬 설정을 할 수 있다. ((스트럿츠 관련 [[study: | ||
| + | 하지만, 동적으로 이미지를 생성하는 독자적인 servlet ((Struts의 %%ActionServlet%%과는 별도의 servlet을 말한다.)) 의 경우 %%RequestProcessor%%를 이용해 캐쉬 설정하는 것은 불가능하다. 이럴 경우의 대안으로 Servlet Filter를 사용할 수 있다.\\ | ||
| + | Servlet의 요청 처리 이전에 response header의 캐쉬 설정을 함으로써 가능해진다. | ||
| - | ====== reference ====== | + | {{keywords> |
| - | 1.[[http:// | + | |
| + | ===== ResponseHeaderFilter ===== | ||
| + | response header 설정을 가능하게 하는 filter의 예를 소개한다. 컴파일된 소스는 http:// | ||
| + | 구할 수 있다. | ||
| + | |||
| + | <code java> | ||
| + | package com.jspbook; | ||
| + | import java.io.*; | ||
| + | import javax.servlet.*; | ||
| + | import javax.servlet.http.*; | ||
| + | import java.util.*; | ||
| + | public class ResponseHeaderFilter implements Filter { | ||
| + | FilterConfig fc; | ||
| + | public void doFilter(ServletRequest req, | ||
| + | | ||
| + | | ||
| + | | ||
| + | ServletException { | ||
| + | HttpServletResponse response = | ||
| + | (HttpServletResponse) res; | ||
| + | // set the provided HTTP response parameters | ||
| + | for (Enumeration e=fc.getInitParameterNames(); | ||
| + | e.hasMoreElements(); | ||
| + | String headerName = (String)e.nextElement(); | ||
| + | response.addHeader(headerName, | ||
| + | | ||
| + | } | ||
| + | // pass the request/ | ||
| + | chain.doFilter(req, | ||
| + | } | ||
| + | public void init(FilterConfig filterConfig) { | ||
| + | this.fc = filterConfig; | ||
| + | } | ||
| + | public void destroy() { | ||
| + | this.fc = null; | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | 위의 filter가 하는 일은 web.xml의 context parameter로부터 response header를 설정하는 것이다. 이 작업을 하는 것이 다음의 4줄이다. | ||
| + | |||
| + | <code java> | ||
| + | for (Enumeration e=fc.getInitParameterNames(); | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Cache Control using ResponseHeaderFilter ===== | ||
| + | 앞서의 %%ResponseHeaderFilter%%를 이용해 cache 설정을 해보자. Response Header중에 Cache 관련 헤더는 Cache-Control이다. | ||
| + | 다음의 code를 web.xml에 추가함으로써 cache 설정을 할 수 있다. | ||
| + | |||
| + | <code xml> | ||
| + | < | ||
| + | < | ||
| + | | ||
| + | < | ||
| + | | ||
| + | < | ||
| + | < | ||
| + | | ||
| + | < | ||
| + | | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | < | ||
| + | | ||
| + | < | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | max-age=3600의 의미는 3600 seconds(60minute)동안 cache시키겠다는 의미이다. | ||
| + | 반대로 client의 cache를 막기위해서는 위의 < | ||
| + | |||
| + | <code xml> | ||
| + | < | ||
| + | < | ||
| + | | ||
| + | < | ||
| + | | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | private, | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ====== reference ====== | ||
| + | 1.[[http:// | ||
| + | ]] | ||