| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

Filterで文字化け対策

提供: MyMemoWiki
ナビゲーションに移動 検索に移動

Filterで文字化け対策

J2EE |

Webアプリケーションの文字化け対策

以下のようなフィルターを作成し、web.xmlに設定。

package info.typea.fugitive.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;

/**
 * Webアプリケーションでの文字コードを一括処理するフィルタ
 * <br/>
 * StrutsのActionFormでは、リクエストパラメータの解析時に、文字エンコーディングが行われないため、
 * アプリケーション全体で使用する文字エンコーディングを定義したフィルタを適用する。
 * <br/>
 * WEB-INF/web.xml にて、以下のように指定することで、有効になる。
 * ここで、使用する文字コードを設定する。
 * <pre style="color:blue;">
 *   <filter>
 *    <filter-name>CharacterEncodingFilter</filter-name>
 *    <filter-class>fugitive.fw.filter.CharacterEncodingFilter</filter-class>
 *    <init-param>
 *      <param-name>encording</param-name>
 *      <param-value>UTF-8</param-value>
 *    </init-param>
 *  </filter>
 *  <filter-mapping>
 *    <filter-name>CharacterEncodingFilter</filter-name>
 *    <url-pattern>/*</url-pattern>
 *  </filter-mapping>
 * </pre>
 * @author yagi
 */
public class CharacterEncodingFilter implements Filter {
  /**
   * 文字エンコーディング
   */
  private String encording = null;
  
  /* @see javax.servlet.Filter#init(javax.servlet.FilterConfig) */
  public void init(FilterConfig config) throws ServletException {
      this.encording = config.getInitParameter("encording");
  }

  /* @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain) */
  public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
      request.setCharacterEncoding(this.encording);
      filterChain.doFilter(request, response);
      response.setCharacterEncoding(this.encording);
  }

  /* @see javax.servlet.Filter#destroy() */
  public void destroy() {
      this.encording = null;
  }
}