文字化けしているのはあまり気持ちのいいものではないので、ここで日本語がきちんと表示されるようにしておこう。WebObjectsでは、Webクライアントからのリクエストを受け取り、そして、処理を行ってページを生成し、それをクライアントに戻すという一連の動作で動いている。そうした動作の細かい部分はもちろんプログラムが動いているのだが、その処理にプログラマが割り込んで自由に処理を組み立てることができると考えれば良い。ページごとにそうしたカスタマイズをプログラムでできると同時に、アプリケーション全体に渡って共通のカスタマイズをすることができるのである。 具体的には、Project BuilderでClassesグループにあるApplication.javaというソースを変更する。左側でソース名をクリックすると、右側にソースが出てくる。以下の図の、選択した部分を加える。なお、このプログラムはどのアプリケーションでもほぼ一定だから、テキストでも記しておこう。コピー&ペースト等で利用できるだろう。
◇Application.javaにプログラムを加える
public void takeValuesFromRequest(WORequest aRequest, WOContext aContext) { aRequest.setDefaultFormValueEncoding("x-euc-jp"); aRequest.setFormValueEncodingDetectionEnabled(true); super.takeValuesFromRequest(aRequest, aContext); }
public void appendToResponse(WOResponse aResponse, WOContext aContext) { aResponse.setContentEncoding("x-euc-jp"); super.appendToResponse(aResponse, aContext); }
このプログラムのうち、appendToResponseというメソッドが、WebObjectsからWebブラウザへの返答、つまりここではデータベースから取り出した結果を含むHTTPの通信に、エンコードの指定を含める。setContentEncodingは、Javaでのエンコードを指定する文字列を記述するが、ここではEUCとして、この文字列にした。データベースでの記録文字コードととりあえずいっしょにしておく。エンコードを指定する文字列は同じエンコードでもいくつもあるので、もちろん、ニーズに応じたエンコードを示す記号を指定することは言うまでもない。(Javaの国際化については、アスキーから出版されている書籍「Javaプログラミング・ノート 国際化と日本語処理」風間一洋著を御覧になることをお勧めする。)オブジェクトの定義が敬称されたものであるため、デフォルトの動作を行うために、親オブジェクトの同一名のメソッドを呼び出している。 そして、再度アプリケーションを実行してみると、Webブラウザでは?は見えず、半角の()やスペースがきちんと表示されている。
◇日本語文字列がきちんと表示されてる
なお、追加するプログラムのうち、takeValuesFromRequestは、Webブラウザからのリクエストに文字コードについての情報を加えるものである。いずれにしても、Application.javaにこれらのプログラムを加えるというのが、WebObjectsでの日本語対応の基本になっている。 |