/*************************************************************************** * Copyright (c) junmix 2009. All rights reserved. * Program Name : GZIPFilter.java * Description : GZIPフィルタリングクラス * Version : 1.00 * * Change Record * ------------- ----- --------------- ------------------------------------- * Date Ver. Editor Description * ------------- ----- --------------- ------------------------------------- * 2009-xx-xx 1.00 junmix 新規作成 * **************************************************************************/ package com.junmix.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** *

* [概 要] GZIPフィルタリングクラス。 *

*

* [詳 細] レスポンスにGZIPフィルターをかけるクラス。 *

*

* [備 考] *

*

* [環 境] JDK 1.5.0_11 *

*

* Copyright(c) junmix 2009 *

*

* $Revision$ *

* * @author junmix * @since 1.00 */ public class GZIPFilter implements Filter, GZIPFilterConst { /** *

* [概 要] フィルターのサービス状態の開始通知処理。 *

*

* [詳 細] 何も行わない。 *

*

* [備 考] *

* * @param filterConfig * フィルター設定オブジェクト * @since 1.00 */ public void init(FilterConfig filterConfig) { // do nothing } /** *

* [概 要] フィルター処理。 *

*

* [詳 細] ブラウザのGZIP対応状況を判別し、対応時はGZIPにて出力を行う。 *

*

* [備 考] *

* * @param req * クライアントがServletへ要求したリクエスト内容を含むHttpServletRequest * @param res * Servletがクライアントに返すレスポンス内容を含むHttpServletResponse * @param chain * フィルタリング用インターフェース * @throws IOException * 入出力エラー発生時 * @throws ServletException * リクエストの処理エラー発生時 * @since 1.00 */ public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { if (req instanceof HttpServletRequest) { // パラメータをダウンキャスト HttpServletRequest request = (HttpServletRequest)req; HttpServletResponse response = (HttpServletResponse)res; // ブラウザがGZIP対応の場合 String acceptEncoding = request.getHeader(ACCEPT_ENCODING); if (acceptEncoding != null && acceptEncoding.indexOf(ACCEPT_ENCODING_TYPE_GZIP) != -1) { // レスポンスをラップする GZIPResponseWrapper wrapper = new GZIPResponseWrapper(response); // フィルター処理 chain.doFilter(req, wrapper); // ストリームとライターをクローズ wrapper.finishResponse(); } else { // ブラウザがGZIP未対応の場合はそのまま chain.doFilter(req, res); } } } /** *

* [概 要] フィルターのサービス状態の終了通知処理。 *

*

* [詳 細] 何も行わない。 *

*

* [備 考] *

* * @since 1.00 */ public void destroy() { // do nothing } }