HTTP リクエストパラメタのエンコーディングをどう指定しますか?

GlassFish は、リクエスト URI のエンコーディングとパラメータのエンコーディングとを区別して扱います。
GET リクエストの場合、クエリ・パラメータはURIの後ろに( <code>?</code> で区切られて)付加されますが、 POST リクエストではパラメータがリクエスト・ボディの中にセットされます。

両者のエンコーディングは、それぞれ異なる場所で設定します:

  • URI のエンコーディングは、<code>domain.xml</code> 内で定義される <code><http-listener></code> 要素の <code>uriEncoding</code> プロパティで指定します。デフォルトのエンコーディングは <code>UTF-8</code> で、対応する HTTP リスナから受け取るすべての URI に対してこのエンコーディングが適用されます。
  • これに対して、リクエストパラメータのエンコーディングはデフォルトで <code>ISO-8859-1</code> に設定されていますが、こちらは 1 、2 ヶ所において上書きされる場合があります:サーブレット内で ServletRequest の <code>setCharacterEncoding</code> メソッドを呼び出してプログラム上から操作されるか、あるいは宣言的な手法を用いて、 <code>sun-web.xml</code> 内で <code><parameter-encoding></code> 要素の <code>default-charset</code> 属性の値としてパラメータのエンコーディングを指定するかです。

以下のサンプルでは、後者の例としてリクエストパラメータのエンコーディングを <code>UTF-8</code> に設定しています:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 8.0 Servlet 2.4//EN" "http://www.sun.com/software/sunone/appserver/dtds/sun-web-app_2_4-0.dtd">

<sun-web-app>
  <locale-charset-info default-locale="">
    <locale-charset-map locale="" charset=""/>
    <parameter-encoding default-charset="UTF-8"/>
  </locale-charset-info>
</sun-web-app>

日本語翻訳: Kana

英文 (翻訳したバージョン: 3)