第 2 章 Servlet
2.3 サーブレットのプログラム例
2.3.1 Hello, World! .............................................................................................................. 37 HelloWorld.java ...............................................................................................37 アプリケーションの実行
本章ではサーブレットの実例を示します。サンプルプログラムはすべて演習の環境においてあ ります。
以下のサーブレットプログラムは「Hello World!!」とウェブブラウザに表示します。
HelloWorld.java
1 package jp.ac.u_tokyo.k.is.chapter2;
2
3 import java.io.*;
4 import javax.servlet.*;
5 import javax.servlet.http.*;
6
7 public class HelloWorld extends HttpServlet { 8 public void doGet(HttpServletRequest request,
9 HttpServletResponse response)
10 throws ServletException, IOException { 11
12 response.setContentType("text/html; charset=UTF-8");
13 PrintWriter out = response.getWriter();
14 out.println("<html><head>");
15 out.println("<title>Hello World!!</title>");
16 out.println("</head><body>");
17 out.println("<p>Hello World!!</p>");
18 out.println("</body></html>");
19 } 20 }
まず1行目でpackage命令を記述します。
1 package jp.ac.u_tokyo.k.is.chapter2;
package命令は、サーブレットクラスを再利用の単位にグルーピングしたい場合などに用いま
す。一定規模以上のアプリケーションでは、同一のクラス名が使われても区別できるように、こ のパッケージという概念を用います。
3~5行目で、import命令としてパッケージをインポートしています。
3 import java.io.*;
4 import javax.servlet.*;
5 import javax.servlet.http.*;
サーブレットクラスには3つのパッケージが必要であり、import命令としてコードの先頭に記 述する必要があります。
必ずインポートしておかなければならないパッケージは、
java.ioパッケージ
javax.servletパッケージ
javax.http.servletパッケージ
の3つです。
もちろん、そのほかに必要なパッケージ(クラス)が存在する場合には、適宜、import命令を 併記します。また複数のパッケージについては複数のimport命令でインポートします。
7行目ではHttpServletを継承してHelloWorld クラスを宣言しています。HttpServletはHTTP
関連の処理をするときに使うクラスです。
7 public class HelloWorld extends HttpServlet {
javax.http.servlet.HttpServletクラスは、サーブレットクラスの基本的な機能(クライアント
からの要求受信・応答送信・処理振り分けなど)を備えたクラスです。サーブレットクラスを定 義する際には、必ずこのHttpServletクラスを継承する必要があります。
HttpServlet が 汎 用 的 な ク ラ イ ア ン ト - サ ー バ 間 の 通 信 機 能 を 提 供 し 、 ユ ー ザ は こ の
HttpServletクラスの機能を利用しながら、独自のロジックを組み込んでいくことになります。
8~10行目ではGETメソッドでのリクエストに対して動作するdoGetというメソッドが出て きています。
8 public void doGet(HttpServletRequest request, 9 HttpServletResponse response)
10 throws ServletException, IOException {
GET メソッドに対して動作する記述を行う場合には 8~10行目と全く同じようにすれば結構 です。POST メソッドに対して動作させたい場合は doGetの部分を doPostに変更するだけで 構いません。HttpServletクラスには7種類のdoXxxxxメソッドが用意されていますが、一般 的によく使用するのはdoGetとdoPostメソッドの2つです。
(1) doGetメソッド
ブラウザから直接にURL指定で呼び出された場合
ページ内のリンク(<a>タグ)や<img>、<frame>タグなどを介して呼び出された場合
HTML フォーム(<form>タグ)から GET メソッドでページが要求された場合(method オプションはデフォルトで“GET”と見なされます)
(2) doPostメソッド
HTMLフォーム(<form>タグ)からPOSTメソッドでページが要求された場合
HttpServletRequest で相手側からの要求を扱い、HttpServletResponse でこちらからの出力 を扱います。この2つを引数とすることによって要求とそれに対する出力をブロック内で扱える ようになります。
また、throws ServletException, IOExceptionは例外処理に関する記述です。
12~13行目では、サーブレットから出力する準備をしています。
12 response.setContentType("text/html; charset=UTF-8");
13 PrintWriter out = response.getWriter();
response.setContentType("text/html") はHttpServletResponseのsetContentTypeメソッド を使って出力がHTMLデータであることを指定しています。
PrintWriter out = response.getWriter()はHttpServletResponseクラスの getWriterメソッド を使い、PrintWriterオブジェクトを取得しています。
また14~18行目では、out.println()でHTMLを出力します。
14 out.println("<html><head>");
15 out.println("<title>Hello World!!</title>");
16 out.println("</head><body>");
17 out.println("<p>Hello World!!</p>");
18 out.println("</body></html>");
今後、このHelloWorldサーブレットを参考に編集することで独自のサーブレットプログラム を開発が可能です。ただし、新しいサーブレットクラスの利用には付録を参考に設定ファイルへ の登録を行う必要があります。
アプリケーションの実行
ウェブブラウザから以下の2つのアドレスにアクセスすることで、サーバ上に転送したサーブ レットのアプリケーションの起動や再起動が可能です。
(起動)http://guinness.is.k.u-tokyo.ac.jp:8080/manager/start?path=/2010/g70000
(再起動)http://guinness.is.k.u-tokyo.ac.jp:8080/manager/reload?path=/2010/g70000 user: student
pass: !webapp
起動したサーブレットアプリケーションには下のアドレスでアクセスできますので、ユーザ名を
自分のものに読み替えてブラウザからアクセスします。
http://guinness.is.k.u-tokyo.ac.jp/2010/g000000/servlet/HelloWorld