bean とサーブレット

Revised: 22nd/June/2002

前節で見たとおり、 bean は、再利用可能性、独立性を高めたオブジェクトの設計規約であり、 Sun Microsystems から仕様書が公開されています。実際のコーディングは、他のクラスのコーディングと同じです。Web アプリケーションでの利用を見るに当たって、これもまたクラスの一つとしてコーディングするサーブレットからの利用を見てみましょう。

bean と、それを使うサーブレットを作ってみましょう。

1. ドキュメント・ルートの作成

http://localhost:8080/beans/ でアクセスできるように、新しいドキュメント・ルートを設定しましょう。ディレクトリは C:\java\BeanDemo にします。このディレクトリを、ドキュメントルートとしてサーバに登録するためには、サーバのインストールディレクトリにある、 conf/server.xml に記述します。

202        <!-- Tomcat Manager Context -->
203        <Context path="/manager" docBase="manager"
204         debug="0" privileged="true"></Context>
205
206        <!-- BeanDemo Examples Context -->
207        <Context path="/beans" docBase="C:/java/BeanDemo" debug="0"
208                 reloadable="true" crossContext="true"/>

参考のために行番号を付しましたが、実際には記述しないでください。

2. ディレクトリ配置

サーブレットや bean などのクラスファイルは、ドキュメントルートの /WEB-INF/classes/ 以下に配置します。今回は、サーブレットは servlet パッケージ、bean は model パッケージとして作ります。従って、サーブレットは /WEB-INF/classes/servlet/、bean は /WEB-INF/classes/model/ の中に作成します。

ディレクトリ配置
図:ディレクトリ配置

3. bean の作成

bean を C:\java\BeansDemo ディレクトリ内に作成します。今回作るのは、半径を受け取って、円の面積と円周を計算するためのものです。

bean 名は model.CircleCalcurationBean とします。

C:\java\BeansDemo\WEB-INF\classes\model\CircleCalcurationBean.java:

package model;

public class CircleCalcurationBean {
	private double radius, area, circum;

	public void calc(double hankei) {
		radius = hankei;
		area = Math.PI * radius * radius;
		circum = 2.0 * Math.PI * radius;
	}

	public double getRadius() {
		return radius;
	}

	public double getArea() {
		return area;
	}

	public double getCircum() {
		return circum;
	}
}
C:\>cd C:\java\BeanDemo\WEB-INF\classes\mod
el

C:\java\BeanDemo\WEB-INF\classes\model>javac -classpath "C:\Program Files\Apa
che Tomcat 4.0\common\lib\servlet.jar" CircleCalcurationBean.java

C:\java\BeanDemo\WEB-INF\classes\model>

4. サーブレットの作成

前の手順で作った bean を利用し、クライアントの要求/応答を制御するサーブレットを作ります。

サーブレットのクラス名は servlet.CircleCalcuration とします。また、別名を CircleCalc として、 URL を /circle/Servlet でアクセスできるようにマッピングします。

ソース

C:\java\BeansDemo\WEB-INF\classes\servlet\CircleCalcuration.java:

package servlet;

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

public class CircleCalcuration extends HttpServlet {

	public void doGet(HttpServletRequest req, HttpServletResponse res)
		throws ServletException, IOException {
		processRequest(req, res);
	}

	public void doPost(HttpServletRequest req, HttpServletResponse res)
		throws ServletException, IOException {
		processRequest(req, res);
	}

	private void processRequest(HttpServletRequest req, HttpServletResponse res)
		throws ServletException, IOException {

		double radius = 0.0, area = 0.0, circum = 0.0;

		// 要求文字コードのセット
		req.setCharacterEncoding("Shift_JIS");
		// 応答文字コードのセット
		res.setContentType("text/html; charset=Shift_JIS");
		// 出力ストリームの取得
		PrintWriter out = res.getWriter();

		// bean の利用
		model.CircleCalcurationBean bean = new model.CircleCalcurationBean();
		radius = Double.parseDouble(req.getParameter("hankei"));
		bean.calc(radius);
		area = bean.getArea();
		circum = bean.getCircum();

		// クライアント(ブラウザ)への出力
		out.println("<html lang=\"ja\">");
		out.println("<head><title>円の面積と円周</title>");
		out.println("</head><body>");
		out.println("<h1>円の面積と円周</h1>");
		out.println("<table border=\"1\">");
		out.println("<tr><th>半径</th><td>" + radius + "</td></tr>");
		out.println("<tr><th>円周</th><td>" + circum + "</td></tr>");
		out.println("<tr><th>面積</th><td>" + area + "</td></tr>");
		out.println("</table>");
		out.println("</body></html>");

		// 出力ストリームを閉じる
		out.close();

	}
}

CLASSPATH

パッケージを使っているので、 CLASSPATH をセットします。セット方法はOSよって異なります。Windows 2000 の場合は次の手順でセットします。「CLASSPATH のセット方法」を参照ください。

  1. 「コントロール パネル」を開く
  2. 「システム」アイコンから「システムのプロパティ」を開く
  3. 「詳細」タブの中の「環境変数(E)」ボタンを押して、「環境変数」シートを開く
  4. 「CLASSPATH」で「変数値」の末尾に ;C:\java\BeanDemo\WEB-INF\classes を追加する(冒頭のセミコロンは他の値との区切り文字)。
  5. 同じく、 ;C:\Program Files\Apache Tomcat 4.0\common\lib\servlet.jar を追加する。

これで、 model パッケージを探し出せるようになりました。

コンパイル

C:\>cd C:\java\BeanDemo\WEB-INF\classes\servlet

C:\java\BeanDemo\WEB-INF\classes\servlet>javac CircleCalcuration.java

C:\java\BeanDemo\WEB-INF\classes\servlet>

web.xml

サーブレット名と URL パタンをマッピングします。 /WEB-INF/web.xml に記述します。

C:\java\BeanDemo\WEB-INF\web.xml:

<?xml version="1.0" encoding="Shift_JIS"?>

<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
	<!-- サーブレット名 -->
	<servlet>
		<servlet-name>CircleCalc</servlet-name>
		<servlet-class>servlet.CircleCalcuration</servlet-class>
	</servlet>

	<!-- URL パターン -->
	<servlet-mapping>
		<servlet-name>CircleCalc</servlet-name>
		<url-pattern>/Servlet</url-pattern>
	</servlet-mapping>
</web-app>

これで、ドキュメントルートの /WEB-INF/classes/servlet/CircleCalcuration.class に対して、 http://localhost:8080/beans/Servlet でアクセスできるようになりました。

5. HTML 文書の作成

前の手順で作ったサーブレットへ半径を渡すための HTML 文書を作成します。ここでは、POST メソッドで渡します。

HTTP POST メソッドは、処理系に引数を渡すためのものでした。ここでは POST メソッドでサーブレットに半径を渡す HTML 文書を作ります。

C:\java\BeanDemo\ServletForm.html:

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" >
<head>
<meta http-equiv="content-type" content="text/html; charset=Shift_JIS" />
<title>円の面積と円周</title>
</head>
<body>
<h1>円の面積と円周</h1>

<form action="/beans/Servlet" method="POST">
<p>半径:
	<input type="text" name="hankei" size="10" />
	<input type="submit" value="計算" /></p>
</form>
</body>
</html>

6. 稼動確認

以上で Web アプリケーションが完成したので、ここで稼動を確認しましょう。

  1. "Start Tomcat" から Tomcat を起動
  2. ブラウザのアドレス欄に http://localhost:8080/beans/ServletFormindex.html を入力して実行
入力フォームの表示例
図:入力フォームの表示例
結果
図:結果

このサーブレットは GET メソッドも受け取れるので、これも試してみましょう。HTTP GET メソッドはリソース要求と共にパラメタを渡すためのものです。アドレスの入力欄に http://localhost:8080/beans/Servlet?hankei=1.0 と入力して実行してください。GET 要求が発行されて、 POST 要求と同様にサーブレットが実行されます。



Copyright © 2002 SUGAI, Manabu. All Rights Reserved.
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送