Tomcat メモ - GET リクエストのパラメータのエンコーディング
Servlet / JSP で GET/POST パラメータを受け取るときは request#setCharacterEncoding() を事前に読んでおく。
これは今時常識ですが、Tomcat でどうしても文字化けしてしまい、2時間くらいハマりました。
WebLogic ではどのバージョンでも setCharacterEncoding() で指定した文字セットでデコードしてくれるのに、Tomcat だと ISO-8859-1 として文字列が取得できてしまうという状況です。
Apache のバグデータベースにも Open 中のバグはなく、ぶらぶら調べてみたら@IT の記事に答えがありました!
なんと Tomcat 5.x から GET パラメータに対しては setCharacterEncoding() が効かなくなったそうです。
・@IT - Javaの文字化け対策FAQ(3)
setCharacterEncodingメソッドの利用において1点注意すべき点は、フォームのデータ送信にGETメソッドを用いたときの振る舞いがWebコンテナの実装依存であることだ。
対策方法は useBodyEncodingForURI というパラメータを servlet.xml 内で指定することだそうです。
恐らく一般的な Tomcat ユーザでは常識なんでしょうね。
例えばこんな感じ。
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" useBodyEncodingForURI="true"/>
明示的にエンコーディングを指定したのだから、それに従うべき、と個人的には思いますが・・。
勉強になりました。
追記:
仕様(2.3/2.4 で確認)によると"It must be called prior to parsing any post data or reading any input from the request." とあり、setCharacterEncoding は post データのエンコードを決定するためのメソッドであることがわかります。
GET のパラメータのエンコーディングについては仕様がなく、コンテナ依存になっている状態のようですね。
#最新の 2.5 では未確認
追記2:
追記3:
単にリクエストからデータを呼び出す前にこのメソッドを呼び出しておけよと言っているだけで、 GET パラメータにもこのエンコーディングが適用されるようなことは暗黙的にも明示的にも言ってないですね。
Servlet Spec 2.5 - SRV.3.9 Request data encoding では、
request reader and parse POST data must be “ISO-8859-1” if none has been
specified by the client request.
と言っているので、このセクションでは POST データのエンコーディングについて説明していることが暗黙的に読み取れます。
GET リクエストパラメータのエンコーディングについてはざっとみたところ Servlet Spec 2.5 でも触れられていないみたいでした。
関連エントリ:
・るいもの戯れ言 - HTTP GETリクエストにおけるパラメータの文字コード
BEA Systems for Sale
もう済んだ話かと思えば、買収騒動に関して BEA が値上げ交渉を始めた模様です。
単に断るだけという戦略は株主の利益保護という観点からは誤った選択だと批判している筋があったので、それに答えた形になるのでしょうか。
・BEA Board Sets $21.00 Per Share Value Position
超テキトウ訳:
Oracle が繰り返し幾らなら売ってくれるんだとしつこいから専門家に相談したら$21くらいが妥当なんじゃないかと。
それ以上の値をつけてくれるなら Oracle だろうと他の会社だろうと歓迎ダヨ。
SAP や EMC ならば重複する領域も少なくソリューションを補完し合う関係になって Oracle に対する強い抵抗勢力となりそうなので、個人的に良いと思うのですが。
さて、ここで参戦してくる会社が出てくるでしょうか?
関連エントリ:
・Oracle、BEA 買収後早くもクローズド戦略に? - BEA JRockit 単体ダウンロード不可
・2008-04-30 - S/N Ratio (by SATO Naoki) - BEA買収完了
・Oracle - BEAの買収を完了
・BEA Systems, Oracle の買収提案に合意
・Oracle のBEA Systems 買収オファー、期限切れる
・Oracle、BEA Systems の買収提案が拒否されたことを発表
・Oracle、BEA Systems 買収に未練
・Oracle による BEA Systems 買収回避
・Oracle が BEA Systemsを買収???