1.3 JSPの使い方
JSPのASPに対する大きな特徴であるスケーラビリティを活かすためには,JSPを単独で使用するのではなく,サーブレットやEJBといったJavaファミリと連携する必要があります.ここでは,いろいろな連携について述べます.
まず,JSPの使い方を示す前にサーブレットの使い方を,つぎにJSPの使い方,最後にサーブレットとJSPの連携について述べます.
(1)サーブレットによるHTMLファイル生成
以下のようにサーブレットのprintlnメソッドによって,簡単にHTMLファイルを生成できます.
public void doGet(HttpServletRequest request,
HttpServletResponse response)
{
// ブラウザからのリクエストを処理
Enumeration results = db.processRequest(request);
// HTML形式でデータを送り返す宣言
response.setContentType("text/html");
// HTML形式のデータの生成
ServletOutputStream out = response.getOutputStream();
out.println("<HTML>");
out.println("<HEAD><TITLE>サーブレットのサンプル</TITL
</HEAD>);
out.println("<BODY>");
out.println("<H1>検索結果</H1>");
out.println("<TABLE>");
out.println("<TR><TH>商品名</TH><TH>価格</TH></TR>");
while(results.hasMoreElements()) {
Item item = (Item)results.nextElement();
out.println("<TR><TD>" + item.name + "</TD><TD>" +
item.value + "</TD></TR>");
}
・・・
}
|
これを実行すると以下のようなHTMLファイルが生成されます.
<HTML>
<HEAD><TITLE>サーブレットのサンプル</TITLE></HEAD>
<BODY>
<H1>検索結果</H1>
<TABLE>
<TR><TH>商品名</TH><TH>価格</TH></TR>
<TR><TD>VisualCafe SE</TD><TD>14800</TD></TR>
<TR><TD> VisualCafe PE </TD><TD>45000</TD></TR>
<TR><TD> VisualCafe DE </TD><TD>98000</TD></TR>
・・・
|
サーブレットはサーバ上でアプリケーションを実行するため,アプレットのようにプログラムをクライアントにダウンロードする必要がなく,CGIアプリケーションのようにリクエストごとにプログラムを起動することもないのでマシンリソースをあまり消費しません.
反面,サーブレットではブラウザに表示するためにHTMLファイルを生成する必要があります.このため,(1)サーブレットのコードのさまざまな場所でprintlnメソッドが呼び出されるので,HTMLファイルや出力イメージがわかりにくい,(2) 出力イメージからサーブレットのコードを修正しにくい,という欠点があります.
(2)JSPファイルによるHTMLファイルを生成
サーブレットのコード内ではなく,以下のように,<%…%>で括ってJSPファイルにJavaのコードを埋め込み,サーバ側で実行します.これは,マイクロソフトのASPに似た方法です.
<HTML>
<HEAD><TITLE> JSPのサンプル</TITLE></HEAD>
<BODY>
<H1>検索結果</H1>
<TABLE>
<TR><TH>商品名</TH><TH>価格</TH></TR>
<%
while (results.hasMoreElements()) {
Item item = (Item)results.nextElement();
out.println("<TR><TD>" + item.name + "</TD><TD>" +
item.value + "</TD></TR>");
}
%>
・・・
</BODY>
</HTML>
|
この方法も,結局,printlnメソッドを呼び出すため,サーブレットを用いた方法と同様に保守性に欠けます.しかも,JSPファイルは順次処理されるため,マルチスレッドで処理できません.
(3)サーブレットとJSPファイルの併用
サーブレットから,callPageメソッドでJSPファイル(View.jsp)を以下のように呼び出します.
public void doGet(HttpServletRequest request,
HttpServletResponse response)
{
// ブラウザからのリクエストを処理
Results results = db.processRequest(request);
// 検査結果の設定
request.setAttribute("results", results);
// JSPファイルの呼び出し
response.callPage("View.jsp", request);
・・・
}
|
以下に呼び出されるJSPファイル(View.jsp)を示します.
<HTML>
<HEAD><TITLE>callPageメソッドのサンプル</TITLE></HEAD>
<BODY>
<USEBEAN NAME="results" TYPE="Results"
LIFESPAN="page">
</USEBEAN>
<Hl>検索結果
(<%=results.getTotalCount() %>件)
</Hl>
<TABLE>
<TR><TH>商品名</TH><TH>価格</TH></TR>
<LOOP PROPERTY="results" PROPERTYELEMENT="x">
<TR><TD>
<DISPLAY PROPERTY="x:name"></TD><TD>
<DISPLAY PROPERTY="x:value"></TD></TR>
</LOOP>
・・・
</BODY>
</HTML>
|
このようにcallPageメソッドを使うことによって,サーブレットにビジネスロジックを,JSPファイルにプレゼンテーションを,それぞれ定義できるようになり,保守性が向上します.
以上,JSPの基本的な使い方について述べました.JSPは,サーブレット,JavaBeansおよびEJB,XMLと組み合わせて,スケールにあった動的なWebアプリケーションを開発できます.たとえば,スケールに合わせて,以下のような使い方が考えられます.
(1)サーバ上のJavaプログラムを呼び出し
ブラウザからhttpによって,HTMLに含まれるJSPによって,サーバ上のJavaプログラムを呼び出すことができます.これはCGIプログラムの代替手段として利用できます.
(2)EJBの呼び出し
サーバ上のJavaプログラムではなく,EJBのRMIなどを呼び出すので,EJBの機能によってアプリケーションを分散できます.
(3)リクエストのリダイレクション
JSPによって,他のJSPやサーブレットにリクエストをリダイレクトできます.
(4)リクエストのインクルーディング
JSPによって,他のJSPやサーブレットにリクエストを渡して,処理を委譲できます.リダイレクションが,レスポンスを他のJSPやサーブレットが直接リクエスト元に返すのに対して,インクルーディングは呼び出し元のJSPに返します.
(5)JSPによるXML文書の生成
JavaServerを用いて,HTMLではなくXML文書を出力できます.
これらの詳細については,第2部「適用」で述べます.
Copyright 2000
今野 睦/飯塚 富雄/杉野 博史/渡辺 康隆/佐藤 章
|