第2回 サーブレットアプリケーションを実行しよう

この連載は、Javaを利用したWebアプリケーションの開発に必要な知識を、ツールを用いて手軽に自分の手を動かしながら覚えていただくことを目的としています。ツールを使うと面倒な設定をすることなく、自分でアプリケーションを試してみることができます。いままでサーブレットのが難しいと感じていた方も、この記事を読んで自分で試すことで、本格的な学習の良いきっかけをつかんでください。(編集局)

ボーランド
新井正広
2004/5/27


 今回は、前回「サーブレットアプリケーションを体験しよう」の作業で自動生成されたコードを基にさらに作業を進めていきます。自動生成されたコードをベースに、今回のサンプルアプリケーションの仕様を満たすようコードを書き換え、Webアプリケーションを完成させましょう。では、早速作業に入ります。

サーブレットの作成

ステップ1:自動生成されたHTMLファイルの編集

 画面左側のプロジェクトペインにはmyservlet.htmlというHTMLファイルが生成されています。ダブルクリックして内容を見てみましょう。ここには、ユーザー名を入力するフィールドとsubmitボタンが自動生成されています。

画面1 自動生成されたHTMLファイル (クリックすると拡大します)

 残念ながら自動生成されたHTMLファイルは少し見栄えが悪いので、少し手直しします。画面下部の[ソース]タブを選択すると、このHTMLファイルをソースコードとして編集できます。リスト1が自動生成されたソースコードです。

リスト1 JBuilderが自動生成したHTMLファイル
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>
MyServlet
</title>
</head>
<body bgcolor="#ffffc0">

<form action="/MyServletModule/myservlet" method="get">
<p>ユーザー名 <input type="text" name="myName"></p>
<p>[Submit] を押して Servlet を呼び出す MyServlet</p>
<p><input type="submit" name="Submit" value="Submit">
<input type="reset" value="Reset"></p>

</form>
</body>
</html>

 このHTMLファイルの内容を修正して、見栄えを良くしましょう。リスト1の赤く表示されている部分を削除し、代わりにリスト2の赤色に表示されているコードを追加します。

リスト2 修正後のHTMLファイル
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>
MyServlet
</title>
</head>
<body bgcolor="#ffffc0">
<H1>はじめて作るサーブレット</H1>
<form action="/MyServletModule/myservlet" method="get">
<p>ユーザー名 <input type="text" name="myName"></p>
<p>ユーザー名を入力して[送信]を押してください</p>
<p><input type="submit" name="Submit" value="送信">

<input type="reset" value="リセット"></p>
</form>
</body>
</html>

 HTMLを修正したら、ソースコードエディタ下部のタブを[表示]に切り替え、期待したとおりに画面が表示できるかを確認してみてください。

ステップ2:サーブレットクラスの編集

 次に、MyServlet.javaファイルを編集します。リスト3は、JBuilderが自動生成したコードです。

リスト3 JBuilderが自動生成したMyServlet.javaのソースコード
package myservletproj;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;

public class MyServlet extends HttpServlet {
  private static final String CONTENT_TYPE =
          "text/html; charset=Shift_JIS";

  //グローバル変数の初期化
  public void init() throws ServletException {
  }

  //HTTP Get リクエストの処理
  public void doGet(HttpServletRequest request,
                  HttpServletResponse response) throws ServletException, 
                  IOException {
    //ユーザー名
    String myName = request.getParameter("myName");
    if (myName == null) {
      myName = "";
    }
    response.setContentType(CONTENT_TYPE);
    PrintWriter out = response.getWriter();
    out.println("<html>");
    out.println("<head><title>MyServlet</title></head>");
    out.println("<body bgcolor=\"#ffffc0\">");
    out.println("<p>サーブレットは GET を受信しました。これは応答です。</p>");
    out.println("</body></html>");
  }

  //リソースの後処理
  public void destroy() {
  }
}

 このコードには、すでにdoGetメソッドのひな型が作られており、この中でHTMLフォームによって設定されるユーザー名を受け取るための変数myNameも自動生成されています。そこで、このサーブレットのコードを修正して、「○○さん、こんにちは」と返答するようにコードを修正します。このコードから理解できるように、サーブレットでは、最終的にクライアントに送信されるHTMLコードを直接プログラム中に記載します。

 初めに、サーブレットで日本語を正しく取り扱うための処理を追加します。doGetメソッドの先頭に

request.setCharacterEncoding("JISAutoDetect");

という行を追加します。

 次に、「サーブレットはGETを受信しました。これは応答です。」という行をコメントアウトします。次の行にカーソルを進め、「out.」と入力します。JBuilderのソースコードエディタは、outのメソッドの一覧をドロップダウンリストとして表示します。ここでは、printlnメソッドを指定しましょう。

画面2 ソースコードの入力支援機能を利用する (クリックすると拡大します)

 続いて、println() メソッドの引数に「myName + "さん、こんにちは。"」と記述します。以上で、このサーブレットの実装は完了です。編集後のサーブレットの該当部分のソースコードは以下のとおりです。

リスト4 修正されたMyServlet.javaのソースコード
  //HTTP Get リクエストの処理
  public void doGet(HttpServletRequest request,
          HttpServletResponse response) throws ServletException, 
         IOException {
    //日本語をただしく処理するためのおまじない(サーブレットAPI2.3の場合)
    request.setCharacterEncoding("JISAutoDetect");

    //ユーザー名
    String myName = request.getParameter("myName");
    if (myName == null) {
      myName = "";
    }
    response.setContentType(CONTENT_TYPE);
    PrintWriter out = response.getWriter();
    out.println("<html>");
    out.println("<head><title>MyServlet</title></head>");
    out.println("<body bgcolor=\"#ffffc0\">");
//    次の行はコメントアウトする
//    out.println("<p>サーブレットは GET を受信しました。これは応答です。</p>");

//    以下の行を追加する
    out.println(myName + "さん、こんにちは。");

    out.println("</body></html>");
  }

Tomcatにおける日本語の処理の問題
Tomcatを使用して日本語を扱うときには、本文で説明したように注意が必要です。この処理を行わないと、日本語で記述した文字列を正しく表示することができません(コメントアウトして試してみましょう)。この問題についての解説は、Java TIPS「サーブレット2.3における文字エンコーディングの指定」(Java Solution)にも掲載されています(サーブレット 2.2の場合はこちら)。これは本格的に開発を始める前に、確認が必要な項目です。

ステップ3:サーブレットのテスト

 それでは、実際にこのWebアプリケーションを起動して、その動作をチェックしてみましょう。プロジェクトツリーからHTMLファイルを選択し、右クリック(ポップアップメニュー)で「"MyServlet"を使ってWeb実行」を選びます。

画面3 Webアプリケーションを実行する (クリックすると拡大します)

 「Web実行」のメニューを選択すると、編集中のJavaソースコードがコンパイルされ、開発環境の中でTomcat (Webコンテナ)が起動します。画面の下部に新しい領域が表示され、ここにTomcatのステータスが逐次表示されます。

画面4 HTMLファイル表示実行された様子、ユーザー名を入力する (クリックすると拡大します)

 Tomcatが起動すると、JBuilder内のWebブラウザには、作成したHTMLファイルが表示されるので、自分の名前を「ユーザー名」のフィールドに入力して「送信」ボタンを押します。送信ボタンがクリックされると、サーブレットが呼び出され、「○○さん、こんにちは」と返事が表示されるはずです。うまく、表示されたでしょうか?

画面5 サーブレットが呼び出され、返事が表示された様子 (クリックすると拡大します)

 アプリケーションが目的どおり動作することを確認できたら、Tomcatタブの「」ボタンを押してTomcatを終了させます。  

1/2

 INDEX

第2回 サーブレットアプリケーションを実行しよう
Page1
サーブレットの作成
  Page2
アプリケーションの配備




「ツールでトライ!初めてのWebアプリケーション」記事一覧




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

注目のテーマ

Java Agile 記事ランキング

本日 月間