2008年12月6日土曜日

サーブレットでエンコード

すべてのレスポンスを統一したコードに変換する方式は
web.xmlに以下を記述します。


 <filter>
  <filter-name>encodingFilter</filter-name>
  <filter-class>filter.EncodingFilter</filter-class>
  <init-param>
   <param-name>encoding</param-name>
   <param-value>UTF-8</param-value>
  </init-param>
 </filter>

 <filter-mapping>
  <filter-name>encodingFilter</filter-name>
  <servlet-name>action</servlet-name>
 </filter-mapping>


まぁこれはStruts用なのでservlet-nameはactionになっていますが、
それぞれの名称にあわせてください。

このクラスに


/**
 * Tomcatコード変換フィルター
 */
public class EncodingFilter implements Filter {

  String encName;

  /**
   * 初期化処理<br>
   * エンコード名を取得
   */
  public void init(FilterConfig config) throws ServletException {
    // TODO 自動生成されたメソッド・スタブ
    encName = config.getInitParameter("encoding");
  }

  /**
   * 実行処理
   */
  public void doFilter(ServletRequest request,
                       ServletResponse response,
                       FilterChain chain) 
                      throws IOException, ServletException {
    request.setCharacterEncoding(encName);
    chain.doFilter(request, response);
  }
}


としておけばOKです。
initでコード名を取ってきていますが、
実装に依存させても大丈夫です。

0 件のコメント: