ブラウザによる確認

 


本当にHelloWorldが走っているのだろうか?ブラウザで確認してみよう。アドレスに次のURLを入力する。

http://localhost:8080/HelloWorld

ここでlocalhostは特別なIPアドレス(127.0.0.1)で、ループバックアドレスと呼び、ネットワークインターフェイスカードでIPデータグラムが折り返される。即ち自分のコンピュータ自身がサーバとなる。8080TCPプロトコルが使うポート番号で、HTTPの場合は80がデフォルトであるが、WTEのデフォルトとなっている8080も良く使われるポート番号である。

 

 

もし皆さんがプログラムした表示メッセージに全角文字が使われていると、正しくブラウザ画面に表示されない可能性がある。ご存知のようにJavaに使われている文字コードは全ての文字が2バイトからなるUnicodeで、各国の文字を統合している。サーブレットエンジンはHTTPのパケットとして送出するときにこれを目的とする文字コードに変換する。HelloWorldサーブレットのdoGetメソッドではどの文字コードに変換するかを明示的に指定していない。従ってサーブレットエンジンは自分がデフォルトとして持っている文字コードに変換してしまう。

 

HTTPパケットのボディ部をどの文字コードに変換して出力するかをサーブレットエンジンに明示的に指定するとともに、HTTPパケットのヘッダ部分にこの情報をつけてブラウザにもこれを通知するために、

res.setContentType("text/html; charset=EUC-JP")

あるいは、

res.setContentType("text/html; charset=Shift_JIS")

あるいは、

res.setContentType("text/html; charset=ISO-2022-JP")

などのようにsetContentTypeの行を変更する。

本当に正しくコード変換されたかは、簡単に確認できる。下図はNetscapeのブラウザでEUCでエンコードした日本語入りのものの表示とページ情報を表示したものである。EUC-JP文字セットが正しくブラウザに伝達されかつエンコードされていることが理解されよう。

 

 

なおWebアプリケーションでは日本語変換の問題が生じやすいので、例えば次のようなドキュメントを参照するとよい。

http://www.ingrid.org/java/jserv/i18n/corruptedchar.html

 

最後にサーブレットを作成する場合に次のような習慣をつけることをお勧めする。

1.        res.setContentType("text/html; charset=EUC-JP")あるいは、res.setContentType("text/html; charset=Shift_JIS")など必ず文字コードを指定する。そうしないとコンテナによって異なる出力結果をもたらす可能性がある。

2.        getServletInfo() なるメソッドで以下のようにこのサーブレットの記述をしておく。版、作者、著作権なども記述すると良い。これはこのサーブレットの立ち上げや初期化に際して呼ばれるメソッドで、アプリケーションで問題が発生したときの解決に有用だからである。

public String getServletInfo() {

return "Hello World, Ver. 1.0";        //他のサーブレットと区別できる文字列

}

3.        service()(あるいはこれが呼び出すdoGet()doPost()など)の要求処理終了時には以下のように出力の吐き出しとクローズを明示的に行う。要求処理の終了時にはこれらは自動的に行われるが、たとえ暗示的に行われてもきちんとプログラムに明示的に書くことが良い習慣である。

out.flush();      // 明示的なフラッシュ

out.close();      // 明示的なクローズ

4.        サーブレットに限らないが、プログラムコードにはなるべくアノテーション(コメント)を記入する。これは将来他人がこれを利用したりデバッグしたりするときに有用である。また形態管理の情報(日付、作者、版数、状態など)の記入も重要である。

 

 

 

前節     目次     次節