MacとJavaと映画と


最近のエントリー


最近のレスポンス
Re: それでも僕はやっていない
わたしもその映画見ました。 ラストが衝撃かな。。。 だってHappy Endじゃないんだもーん。 でも良質。たしかに役所広司はかっこいい!

Re: それでも僕はやっていない
確かに、ラストの落としどころは良いですね...

Re: それでも僕はやっていない
ボクもこないだ観たよ~。 いや~、怖いね、満員電車。 ラストシーンが好きだったね~。小日向文世...

Re: 帯状疱疹
おぉ、聞いたことないけれども何かとかかっ...

Re: 帯状疱疹
家のカミサンもなったことがあります。 早くよくなるといいですね。

Re: 帯状疱疹
うーん、仲間がいると思うと気が休まります...

Re: 帯状疱疹
聞いたことなかったですけど、結構かかる人...

Re: 帯状疱疹
私もかかったことあるんでわかりますが,結...

Re: 帯状疱疹
ご愁傷様です。早くよくなられることを願っ...

Re: 麗しのサブリナ
やっぱりヘップバーンはいいですねー
10月 2007
  1  2  3  4  5  6 
 7  8  9  10  11  12  13 
 14  15  16  17  18  19  20 
 21  22  23  24  25  26  27 
 28  29  30  31    
9  |  今日  |  11





はてなブックマーク数

あわせて読みたい


follow yusukey at http://twitter.com


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)

■GETメソッド利用時の注意点

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:
いや、GET リクエストは HTTP リクエストの一行目に書かれているのだから、デコード対象である "any input from the request" に含まれるんじゃないの?

追記3:
単にリクエストからデータを呼び出す前にこのメソッドを呼び出しておけよと言っているだけで、 GET パラメータにもこのエンコーディングが適用されるようなことは暗黙的にも明示的にも言ってないですね。
Servlet Spec 2.5 - SRV.3.9 Request data encoding では、
The default encoding of a request the container uses to create the
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リクエストにおけるパラメータの文字コード

タグ :

サーブレット仕様では、setCharacterEncoding()はBODY部に適用されると書かれているんで、Tomcatとしては、仕様に合わせて変更したということのようです。なんで仕様がGETリクエストを除外したのかは不明なんですが。私も昔、ハマりました
なるほど。
仕様を読むと"It must be called prior to parsing any post data or reading any input from the request."とかいてありました!
しかし、GET のパラメータについてコンテナ依存があるのは良くない状況ですね。


コメント追加

タイトル
本文
HTML : b, i, blockquote, br, p, pre, a href="", ul, ol, li
名前
E-mail
Webサイト
保存しますか? はい  いいえ 

E-mailは公開されません, このエントリーの新規コメント通知が必要なら記入します。(解除可能)

トラックバックURL http://yusuke.homeip.net/diary/.action?entry=1193369729612