JSPの基礎知識

ServletとJSP、Beanのうまい連携方法を教えてください

テンアートニ 浅井秀一
2001/3/29

 ServletとJSP、Beanを使用してWebアプリケーションを作成する場合、BeanをModel(モデル)、JSPをView(ビュー)、ServletをController(コントローラ)というようにMVCアーキテクチャにマッピングするとよいでしょう。

 では、実際にどのようにServlet+JSP+BeanをMVCアーキテクチャにマッピングするのか、「電話番号検索アプリケーション」の作成を通して見ていきましょう。

●電話番号検索アプリケーションの仕様
 まず、作成するアプリケーションの仕様を決定します。「電話番号検索アプリケーション」は、クライアントから送信される氏名をキーとして電話番号を検索し、結果を表示する機能を持つことにします。実際の流れとしては以下のようになります。

氏名を入力送信
   ↓
番号の検索
   ↓
結果を表示

●Bean(Model)の作成
 一般的にModelとは、アプリケーションデータと、そのデータ変更に適用されるビジネスルールの、ソフトウェア抽象といわれています。よって「電話番号検索アプリケーション」ではModelとして、以下の機能を持つ電話番号検索Bean、 SearchTelBeanを作成します。

  • 氏名から電話番号を検索し検索結果を保持
  • 検索した結果を外部から参照可

 SearchTelBeanのコーディング例は以下のようになります。

package searchtel;
import java.util.Vector;
import java.sql.*;

public class SearchTelBean {
  private String tel = null;
  /** 結果を取得するメソッド */
  public String getTel() {
    return tel;
  }
  public void setTel(String tel) {
    this.tel = tel;
  }
  /** 氏名から電話番号を検索するメソッド */
  public void searchTels(String name) {
    String result = "XX-XXXX-XXXX";
    //氏名から電話番号を検索し文字列resultをセット
    //するロジックを実装する
    setTel(result);
  }
}

 Modelでは、画面遷移の制御や、HTMLタグの出力など表示にかかわるロジックを実装しません。

●JSP(View)の作成
 Viewの機能はモデルのコンテンツの描画です。「電話番号検索アプリケーション」ではViewとして、SearchTelBeanの検索結果を取得し表示するresult.jspと、ユーザーが検索する氏名とServletへの送信を行う form.htmを作成します。result.jspのコーディング例は以下のようになります。なお、form.htmのコーディング例はここでは省略します。

<HTML>
<HEAD>
<jsp:useBean id="searchTelBean" scope="request"
class="searchtel.SearchTelBean" />
<TITLE>検索結果</TITLE>

<BODY>
検索結果:<jsp:getProperty name="searchTelBean" property="tel" />
</BODY>
</HTML>

 Viewでは画面遷移の制御やビジネスロジックの実行は行いません。

●Servlet(Controller)の作成
 Controllerはユーザーからの要求を解釈し、Modelを操作してViewを選択します。「電話番号検索アプリケーション」では以下の要件を満たすコントローラサーブレット SearchTelServletを作成します。

・ モデルであるSearchTelBeanのインスタンス作成
・ ユーザーから送信されたnameパラメータをもとにSearchTelBeanを操作
・ SearchTelBeanのインスタンスをJSPに引き渡すためにHttpServletRequestオブジェクトにセット
・ Viewであるresult.jspの呼び出し

 SearchTelServletのコーディング例は以下のようになります。

package searchtel;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;

public class SearchTelServlet extends HttpServlet {
 /**HTTP Get リクエストの処理*/
  public void doGet(HttpServletRequest request,
   HttpServletResponse response) throws ServletException,
   IOException {
    String name = request.getParameter("name");
    SearchTelBean searchTelBean = new SearchTelBean();
    //電話番号を検索
    searchTelBean.searchTels(name);
    //BeanをJSPに渡すためにHttpServletRequestオブジェクトにセット
    request.setAttribute("searchTelBean", searchTelBean);
    //ViewであるJSPを呼び出す
    RequestDispatcher rDispatcher =    
     request.getRequestDispatcher("/result.jsp");
    rDispatcher.forward(request, response);
  }
}

 Controllerではビジネスロジックを実装しません。

 以上で電話番号検索アプリケーションは完成です。全体図は以下のようになります。

 このように、Servlet+JSP+BeanをMVCアーキテクチャとマッピングすることにより、それぞれの役割が明確になり設計およびコーディングがしやすくなります。

 

「Java Solution FAQ」

 

 



Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間