TomcatのURL文字コートに関して(バージョン7.0.73以降)

IT
スポンサーリンク

こんにちは😁

今回は、Tomcatを使ってて手間取ったことがありましたので、
備忘録として残しておきます。

Tomcatとは、javaでサーバーを動かすときに必須な
サーブレットコンテナのソフトです。
作成したjavaをサーブレットコンテナに乗せて起動して
初めて画面等々で動かすことができます。
正式名称は、「Apache Tomcat」と言います。
「Apache」とは別で、こっちはWebサーバになります。
ややこしいですが、javaを動かす時には、このサーブレット
コンテナとwebサーバを使用することが多いです。

本題に入ります。
Tomcatのバージョン7.0.73以降で、HTTPリクエストでの
文字チェックがより強化されています。
具体的には、例えば画面遷移先のURLに日本語の文字列が
含まれているとエラー(IllegalArgumentException)になります💦

回避策としは、前のバージョンに戻すかURLパラメータを
調整してくださいとのことです。

Tomcatのバージョンは落とせないので、何とか日本語URL
をエンコードできないかをやってみましたよ。

String test = “こんにちは”
String testcode = URLEncoder.encode(test, “UTF-8”);

これは、URLパラメータをリクエストにセットする前に
エンコードしています。
エンコードというのは、「%e3%81%93%e3%82%93」
といった風な文字列です。

↓日本語ありのURL
「http:testtest.co.jp/try/try.jsp?param=こんにちは&num=1」
↓エンコード後のURL
「http:testtest.co.jp/try/try.jsp?param=%e3%81%93%e3%82%93%e3%81%ab%e3%81%a1%e3%81%af&num=1」

下のURLだと、Tomcat7.0.73でOKになりました。
エンコードするとどうしても長くはなってしまいます。

そして、詰まってしまったのは、ここから先です。
なんと、遷移先で、このURLのパラメータを画面に項目として
セットしていたんですね。
つまり、今まで、画面に「こんにちは」と出力されていたものが、
「????(なんか文字化け)」と出力されるようになりました。

画面遷移後に、遷移先画面のjsp内でエンコードを戻す必要があるん
ですね。
これがなかなかうまくいきませんでした。

まず、遷移先画面のjsp内でリクエストに対して、
setCharacterEncoding(“MS932”)をしています。
このMS932は文字コードの1つで日本語に対応しています。
なので、URLのパラメータが日本語の場合は都合がいいのですが、
エンコードの場合はさらに変な文字列に変換されて出力されて
しまいます。

↓ 結果的にはこれでうまくいきました。

testcode = new String(testcode.getbytes(“iso-8859-1″),”UTF-8”);

どうやらTomcatのデフォルト文字コードが「iso-8859-1」
だそうなので、それに合わせてから「UTF-8」に変換しています。
最初は、URLEncoder.encode()を使用してエンコードしたので、
URLDecoder.decode()を使用してデコードしようとして
いましたが、
結局これではうまくいきませんでした。

調べてみたら、今回はTomcatのバージョン7でしたが、
バージョン8ではデフォルト文字コードは「UTF-8」だそうで、
その場合は、そのままでいけるんでしょうかね🙄

文字コードに関してはなかなか慣れず、詰まってしまうと
頭を悩ませることが多いですが、今回大変勉強になりました☄

今回は、ここまで🤚

では、また次回。

コメント

タイトルとURLをコピーしました