またまた今更な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パラメータの設定:
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 "";
        }
    }
}


(動作未確認)

コメント

このブログの人気の投稿

ヨドバシカメラの店舗購入履歴を見るには…

C# の WPF の DataGrid で 行を交互に背景色を変える+選択色を変える+カラムが無い所も変える…

Visual Studio の ホットリロードが動かない場合に確認するところ