[トライアル版連動企画]
Webアプリケーションの作成が一通り理解できる基礎講座


藤井 等
ボーランド株式会社
2000/12/26

第2回 サーブレット、JSPの開発と実行

 サーブレットを使った開発

  はじめに、サーブレットでコードを書いてみよう。サーブレットは、Webサーバ上で動作するJavaプログラムである。JBuilderを用いてサーブレットによる開発ステップを理解しよう。

■サーブレットウィザードを使う

 JBuilder 4でサーブレットを開発するには、サーブレットウィザードを用いる。[ファイル]→[新規作成]を実行し、オブジェクトギャラリーから[サーブレット]を選択する。

画面1 サーブレットウィザード (クリックすると拡大します)

 サーブレットは、クライアントからのHTTPリクエストに応答し、処理を実行する。GETリクエストに対してはdoGet()メソッドが、POSTリクエストに対しては、doPost()メソッドが呼び出される。ウィザードでは、これらのメソッドの実行をチェックする。

 プロジェクトウィザードで、mywebappというプロジェクトを作成する。サーブレットウィザードの最初のステップでは、次のように指定する。

項目
パッケージ mywebapp
クラス MyFirstServlet
生成する内容の種類 HTML
ヘッダーコメントの生成 (チェックしない)
単一スレッドモデル (チェックしない)

メソッドの実装

(doGet、doPostをチェックする)

 次のステップでは、SHTMLファイルの生成を指定する。SHTMLを使うと、SSI(Server Side Include)という技術を使って、HTMLの一部をサーバ側で結合してクライアントに配信できる。SHTMLでは、<SERVLET>タグを使用できる。<SERVLET>タグは、サーバ側でサーブレットの実行結果に置き換えられる。

項目
SHTMLファイルの生成 (チェックする)
<SERVLET>タグの生成 (チェックする)
リンクの生成 (チェックしない)

 最後のステップでは、サーブレット引数を指定する。サーブレット引数は、POSTのときなどにクライアントからサーブレットに渡されるパラメータである。
[引数の追加]ボタンを押し、引数を追加する。追加した項目を以下のように設定する。

項目
名前 name
String
説明 (空白)
変数 name
デフォルト (空白)

 [終了]ボタンを押すと、サーブレットクラスが生成される。

■サーブレットコードを理解する

  生成されたコードには、2つの重要なメソッドがある。doGet()は、クライアントがサーブレットURLを指定してアクセスしてきたときに、応答する内容を記述している。ここで必要なコードは、リスト1のとおりである。

リスト1
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  response.setContentType(CONTENT_TYPE);
  PrintWriter out = response.getWriter();
  out.println("<font color=\"green\">");
  out.println("サーブレットは GET を受信しました。これは応答です。");
  out.println("</font>");
}

 このメソッドでは、responseという応答情報を格納したオブジェクトから、出力ストリームを取得し、HTMLコンテンツを出力している。基本的な処理の流れは次のようになる。

(1) コンテントタイプの指定
response.setContentType(CONTENT_TYPE);

 変数CONTENT_TYPEは、以下のように定義されている。

private static final String CONTENT_TYPE = "text/html; charset=Shift_JIS";

(2) 出力ストリームの取得
PrintWriter out = response.getWriter();

(3) HTMLタグの出力
out.println("<font color=\"green\">");
out.println("サーブレットは GET を受信しました。これは応答です。");
out.println("</font>");

 一方、doPost()では、HTMLフォームなどで入力されたデータを受け付ける(リスト2)

リスト2
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = "";
  try {
    name = request.getParameter("name");
  }
  catch(Exception e) {
    e.printStackTrace();
  }
  response.setContentType(CONTENT_TYPE);
  PrintWriter out = response.getWriter();
  out.println("<html>");
  out.println("<head><title>MyFirstServlet</title></head>");
  out.println("<body>");
  out.println("サーブレットは POST を受信しました。これは応答です。");
  out.println("</body></html>");
}

 以下の1行は、サーブレット引数を取り出すコードである。

name = request.getParameter("name");

 日本語を含むパラメータを取り出すには、次のように変更しなければならない。

name = new String(request.getParameter("name").getBytes("ISO8859_1"), "JISAutoDetect");

 出力内容に、取得したパラメータを含めてみよう。

out.println("<html>");
out.println("<head><title>MyFirstServlet</title></head>");
out.println("<body>");
out.println("サーブレットは POST を受信しました。これは応答です。");
out.println("<br>Hello World, hello " + name + "!");
out.println("</body></html>");

 最後に、生成されたSHTMLファイルを修正する。<servlet>タグ中の、不要な<param>タグを削除する。

<servlet
  codebase=""
  code="mywebapp.MyFirstServlet.class"
>
</servlet>


■サーブレットを実行してみる

 作成したサーブレットを実行するには、JBuilderのプロジェクトペインで、サーブレットクラスを選択するか、サーブレットを呼び出すSHTMLファイルを選択して、[Web実行]メニューを実行する。ここでは、SHTMLファイルを選択しよう。

 SHTMLファイルを実行すると、図のように、サーブレットを含むHTMLコンテンツが表示される。

画面2 SHTMLファイルの実行 (クリックすると拡大します)

 ここに表示されている内容は、doGet()に記述した出力結果である。入力フォームに名前を入力して、[Submit]ボタンを押すと、doPost()メソッドが実行され、結果が表示される。

画面3 doPost()の実行結果 (クリックすると拡大します)

 では、作成したサーブレットをInprise Application Serverに配布してみよう。Inprise Application Serverでは、サーブレットクラスをインストールディレクトリ下の servlets/ に配置する。JBuilderで作成したプロジェクトの mywebapp/class 下に生成されたclassファイルを、このディレクトリ下にコピーする。この例では、servlets/mywebapp/ に、MyFirstServlet.classをコピーすればよい。次に、SHTMLファイルをコピーする。これは、インストールディレクトリ下の html/public_html下にコピーする。

  Inprise Application Serverを起動したら、ブラウザから次のようなURLを指定する。

http://localhost:8080/MyFirstServlet.shtml

以上で、JBuilderで実行したときと同じように、サーブレットを呼び出せる。

JSPを使った開発

JBuilderで学ぶWebアプリケーション構築(第2回)
サーブレットを使った開発
  サーブレットウィザードを使う
  サーブレットを理解する
  サーブレットを実行してみる
  JSPを使った開発
  Beanを作ってみる
  JSPウィザードを使う
  JSPを実行してみる


連載記事一覧




Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間