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)
|