またまた今更なTomcat5.X 以上の設定
SAStrutsとExtjs で開発してる前提で…
Tomcat5 以上を使っているとたまにぶつかる「GETパラメータの文字化け」についてです。
グーグル先生に問いただすと「server.xml に useBodyEncodingForURI="true"を設定しろ」っていうのがたくさん書いてありますね。
ま、一番楽ですから良いと思います。
例えば:
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"
compression="on"
compressableMimeType="text/html,text/xml,text/plain,text/javascript,text/css,application/json,application/javascript,image/x-icon,image/png"
compressionMinSize="128"
useBodyEncodingForURI="true"/>
しかし!個人的にserver.xml を編集は可能な限り減らしたいです。と言うか編集したくない。
(どうせ8080ポート消すんだし…と言う話もあるが…)
context.xml に記載して対応出来れば問題無いんですが、この件はそうもいかないようです。
なぜ server.xml を編集したくないか → 修正するファイルが多くなればリリースミスが増える
全てはこれですね。
という訳で、server.xml に useBodyEncodingForURI="true" を記載せず、コーディングルールで対応する方法です。
結論から言えば、Tomcatがやってくれるはずのエンコードを自前でやってしまえ。と言う話です。
そのため、JavaScript側で、エンコードを2回やってやります。
その代わり、SAStruts の場合、フィルターでデコードしてくれるけど、さらにデコードしてやる必要が出て来ます。
基本的に、POSTやAjaxでリクエストを投げるのでほとんど使う事は無いはずですが、ファイルのDLなどにはまだ使う事があるかな?とか思ってます。
以下サンプル:
リクエストGETパラメータの設定:
Extjsだと
Javaの処理:
(動作未確認)
Tomcat5 以上を使っているとたまにぶつかる「GETパラメータの文字化け」についてです。
グーグル先生に問いただすと「server.xml に useBodyEncodingForURI="true"を設定しろ」っていうのがたくさん書いてありますね。
ま、一番楽ですから良いと思います。
例えば:
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"
compression="on"
compressableMimeType="text/html,text/xml,text/plain,text/javascript,text/css,application/json,application/javascript,image/x-icon,image/png"
compressionMinSize="128"
useBodyEncodingForURI="true"/>
しかし!個人的にserver.xml を編集は可能な限り減らしたいです。と言うか編集したくない。
(どうせ8080ポート消すんだし…と言う話もあるが…)
context.xml に記載して対応出来れば問題無いんですが、この件はそうもいかないようです。
なぜ server.xml を編集したくないか → 修正するファイルが多くなればリリースミスが増える
全てはこれですね。
という訳で、server.xml に useBodyEncodingForURI="true" を記載せず、コーディングルールで対応する方法です。
結論から言えば、Tomcatがやってくれるはずのエンコードを自前でやってしまえ。と言う話です。
そのため、JavaScript側で、エンコードを2回やってやります。
その代わり、SAStruts の場合、フィルターでデコードしてくれるけど、さらにデコードしてやる必要が出て来ます。
基本的に、POSTやAjaxでリクエストを投げるのでほとんど使う事は無いはずですが、ファイルのDLなどにはまだ使う事があるかな?とか思ってます。
以下サンプル:
リクエストGETパラメータの設定:
http://XXX/XXX/xxx?aaa=encodeURI(encodeURI("あいうえお"))&bbb=encodeURI(encodeURI("かきくけこ"))
Extjsだと
params = {
aaa : encodeURI('あいうえお'),
bbb : encodeURI('かきくけこ')
}
src = '/XXX/xxx?' + Ext.urlEncode(params)
Javaの処理:
Formクラスの中で…
public class xxxx {
public String aaa;
public String bbb;
public String getDecodeaaa() {
try {
return URLDecoder.decode(aaa, "UTF-8");
} catch (final UnsupportedEncodingException e) {
return "";
}
}
public String getDecodeSaveFileName() {
try {
return URLDecoder.decode(bbb, "UTF-8");
} catch (final UnsupportedEncodingException e) {
return "";
}
}
}
(動作未確認)
コメント
コメントを投稿