Revised: 22nd/June/2002
前節で見たとおり、 bean は、再利用可能性、独立性を高めたオブジェクトの設計規約であり、 Sun Microsystems から仕様書が公開されています。実際のコーディングは、他のクラスのコーディングと同じです。Web アプリケーションでの利用を見るに当たって、これもまたクラスの一つとしてコーディングするサーブレットからの利用を見てみましょう。
bean と、それを使うサーブレットを作ってみましょう。
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"/>
参考のために行番号を付しましたが、実際には記述しないでください。
サーブレットや bean などのクラスファイルは、ドキュメントルートの /WEB-INF/classes/
以下に配置します。今回は、サーブレットは servlet
パッケージ、bean は model
パッケージとして作ります。従って、サーブレットは /WEB-INF/classes/servlet/
、bean は /WEB-INF/classes/model/
の中に作成します。
![]() |
図:ディレクトリ配置 |
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>
前の手順で作った bean を利用し、クライアントの要求/応答を制御するサーブレットを作ります。
サーブレットのクラス名は servlet.CircleCalcuration
とします。また、別名を /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 をセットします。セット方法はOSよって異なります。Windows 2000 の場合は次の手順でセットします。「CLASSPATH のセット方法」を参照ください。
;C:\java\BeanDemo\WEB-INF\classes
を追加する(冒頭のセミコロンは他の値との区切り文字)。;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
でアクセスできるようになりました。
前の手順で作ったサーブレットへ半径を渡すための 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>
以上で Web アプリケーションが完成したので、ここで稼動を確認しましょう。
http://localhost:8080/beans/ServletFormindex.html
を入力して実行![]() |
図:入力フォームの表示例 |
![]() |
図:結果 |
このサーブレットは GET メソッドも受け取れるので、これも試してみましょう。HTTP GET メソッドはリソース要求と共にパラメタを渡すためのものです。アドレスの入力欄に http://localhost:8080/beans/Servlet?hankei=1.0
と入力して実行してください。GET 要求が発行されて、 POST 要求と同様にサーブレットが実行されます。