概要

Servlet2.3の仕様バグで、HTTP-REQUESTのボディ部の文字コードがUS-ASCII決め打ちなので、フィルタで埋め込んでやる必要があります。
尚、ヘッダ部はここで文字コードを埋め込んでやってもエンコードされないので、日本語の文字列をGET( http://foo.com/request?name=圃下太郎 )で受け取る場合には、別途ヘッダをエンコードしてやる必要があります。(だから画面からGETで日本語を送らないというのは賢明な判断)

ソースコード

public class CharsetEncodingFilter
 implements Filter {
 /** jakarta-commons-logging */
 private static Log logger = LogFactory.getLog(CharsetEncodingFilter.class);

 /** このサーブレットアプリケーションの文字コードセット名 */
 private String charset = null;

 /**
  * デフォルトコンストラクタ
  */
 public CharsetEncodingFilter() {
   super();
 }

 /*
  * @see javax.servlet.Filter#destroy()
  */
 public void destroy() {
   logger.info("CharsetEncodeFilter終了します。文字コード:" + charset);
 }

 /**
  * REQUESTに文字コード名を設定します。
  * @param req リクエスト
  * @param res レスポンス
  * @param chain FilterChain
  * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest,
  * javax.servlet.ServletResponse, javax.servlet.FilterChain)
  */
 public void doFilter(
   ServletRequest req, ServletResponse res, FilterChain chain)
   throws IOException, ServletException {
   req.setCharacterEncoding(charset);

   chain.doFilter(req, res);
 }

 /**
  * web.xmlから文字コードセット名を受け取ります.
  * <pre>
  * web.xmlから、文字コードセット名を受け取ります。
  * 設定されていない場合は、JISAutoDetectになります。
  * </pre>
  * @param filterconfig フィルタ設定情報
  * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
  */
 public void init(FilterConfig filterconfig) throws ServletException {
   charset = filterconfig.getInitParameter("charset");

   if (charset == null) {
     charset = "JISAutoDetect";
   }
   
   logger.info("CharsetEncodeFilter起動します。。文字コード:" + charset);
 }
}

web.xml

<!-- Filter -->
<filter>
  <filter-name>CharsetEncodingFilter</filter-name>
  <filter-class>com.foo.CharsetEncodingFilter</filter-class>
  <init-param>
    <param-name>charset</param-name>
    <param-value>Shift_JIS</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>CharsetEncodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

web.xmlの記述順序を参照


Java#JavaEE


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS   sitemap
Last-modified: 2006-02-18 (土) 03:02:21 (3941d)
ISBN10
ISBN13
9784061426061