サーブレットとJavaBeanとJSPで作る
サーブレットとJavaBean、JSPで作ってみる。
はじめに
ここでは、Servlet002からhtmlの作成処理を抜き出し、JSPに表示を任せるように変更します。入出力仕様は、Servlet001の時と同じです。JSPの作成
WEB-INFの並びに「web」フォルダーをつくり、以下のJSPを「result.jsp」という名前で保存してください。JSPはhtmlに似ていますので、Servletで既述するよりも「最終的な表示イメージが把握しやすく」なっていますね。<%@ page contentType="text/html;charset=Shift_JIS" language="java" %>
<html>
<head>
<title>検索結果</title>
</head>
<body>
<h3>部門コードの検索結果です。</h3>
<BR>検索対象は<%=request.getParameter("BUMON")%>です(前方一致検索)
<jsp:useBean id="myBean" class="bean.Bean001" scope="request"/>
<BR>検索数は<%=Integer.toString((myBean.getResult()).size()) %>です(前方一致検索)<BR>
<%
java.util.ArrayList<String> aList=myBean.getResult();
java.util.Iterator it = aList.iterator();
while(it.hasNext()){
out.println("<BR>");
String temp = (String)it.next();
out.println(temp);
}
%>
<BR><BR>検索が終了しました。
</BODY></HTML>
この中で重要なのは「<jsp:useBean ...>」のセンテンスで、Servlet003からJavaBeanを受け取って、このJSP中で使用できる状態にします。実際には、requestスコープからmyBeanという名前のオブジェクトを取り出し、Bean001のインスタンスにキャストします(このため、サーブレットでは、Bean001をid属性で指定する「myBean」という名前でリクエストスコープに格納し、このJSPにフォワードしなくてはなりません)。また、class属性はbean.Bean001という完全修飾名で指定します。
<% ~ %>はスクリプトレットといってjavaをそのまま既述できる部分です。<jsp:useBean ... >でBean001が取得できますので、Servlet002中の「繰り返しによるデータの出力処理」を、ほぼそのまま使用できています。ただし、ArrayListなどのクラスはその完全修飾名で指定するように変更しています(これは、import宣言をしていないためです)。
JSPのSyntaxの詳細については一般書籍を参照してください。
Servlet003の作成
JavaSourceの直下にServlet003を作成します。Servlet002を変形して以下のようにしてみましょう。import java.sql.Connection;
import java.sql.DriverManager;
import java.util.ArrayList;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import bean.Bean001;
public class Servlet003 extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res){
// リクエストパラメータの取得
String key = req.getParameter("BUMON");
try {
Class.forName("org.hsqldb.jdbcDriver").newInstance();
Connection con = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost:9001","sa","");
String sqlStatement = "select * from sample.shiiresaki where bumonid like '"+ key +"%'";
Bean001 myBean = new Bean001();
myBean.setCon(con);
myBean.setSqlStatement(sqlStatement);
myBean.execute();
if(con!=null) con.close();
ArrayList aList = myBean.getResult();
req.setAttribute("myBean",myBean);
ServletContext sc = getServletContext();
RequestDispatcher rd = sc.getRequestDispatcher("/web/result.jsp");
rd.forward(req,res);
} catch (Exception e) {
e.printStackTrace();
} finally{
}
}
}
Servlet002からの変更点は、Bean001をmyBeanという名前でHttpRequestに保存し、jspにフォワードする以下の部分です。ここはほぼ「おきまりのコーディング」です。
req.setAttribute("myBean",myBean);
ServletContext sc = getServletContext();
RequestDispatcher rd = sc.getRequestDispatcher("/web/result.jsp");
rd.forward(req,res);
JavaBeanについては変更ありません。
Servlet003は、Servlet002と比較してだいぶすっきりした形になりました。機能的にも、DBコネクションの取得、リクエストパラメータの取得(入力)とJSPへのフォワードがその中心となり、「コントローラー(controller)としての機能に特化した形」になっています。また、JSPはServlet004から受け取ったデータを表示するという「表示機能(View)」に特化した機能を持ちます。JavaBeanは「データ取得を行う」ビジネスロジック(model)に特化しています。
これがMVCモデルのもっとも原始的な形です。
それでは、ブラウザのURLに「http://localhost:8080/servlet/Servlet003?BUMON=xxx 」 (xxxは任意)といれて実行してみてください。Servlet001の時と同じ画面(以下)が戻るはずです。
以下がこの処理のフロー図です。
2007年03月02日(金) 14:54:19 Modified by wanderingse
添付ファイル一覧(全2件)
0f1e14d1fbaefcd4.png (9.81KB)
Uploaded by wanderingse 2007年03月02日(金) 14:53:09
Uploaded by wanderingse 2007年03月02日(金) 14:53:09
e7473d3e61d12c63.png (57.90KB)
Uploaded by wanderingse 2007年03月02日(金) 14:53:09
Uploaded by wanderingse 2007年03月02日(金) 14:53:09