Wiki内検索
カウンタ
メニュー
最近更新したページ
最新コメント
トップページ by awesome things!
トップページ by check it out
Generics(Java) by stunning seo guys
String(Java) by awesome things!
トップページ by check it out
PHPのページ by stunning seo guys
Tomcatのページ by stunning seo guys
トップページ by check it out
トップページ by awesome things!
タグ

サーブレットと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
e7473d3e61d12c63.png (57.90KB)
Uploaded by wanderingse 2007年03月02日(金) 14:53:09



スマートフォン版で見る