Javaの道 Javaに関する
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板

Javaの道 > Servlet・JSP > JavaBeans −3.Servlet、JSP、JavaBeansの連携

更新日:2006/10/9
JavaBeans−3.Servlet、JSP、JavaBeansの連携
このページでは、ServletJSPJavaBeansの連携方法について解説します。
ServletとJavaBeansの連携
JSPとJavaBeansの連携方法については、前ページで解説しましたため、ここではServletとJavaBeansの連携方法について解説します。

ServletもJavaBeansもJavaプログラムであるため、連携方法は他のJavaプログラムの連携と変わりません。Servletの中で、JavaBeansのオブジェクトを生成し、オブジェクトを通してJavaBeansのメソッドを呼び出すことで行います。他のJavaプログラムとの違いはWebアプリケーションのスコープを意識する必要があることです。スコープを意識することで、Servlet、JSP、JavaBeans間で連携が図れます。

Servletでスコープを意識したデータ管理を行うには、各スコープのsetAttributeメソッドや、getAttributeメソッドを使用します。それらのメソッドを使用してJavaBeansオブジェクトの管理を行うことにより、Servlet、JSP、JavaBeans間で各スコープにおける連携を行えます。Servletのスコープの詳細はJavaの道:Servlet(スコープ)を参照してください。
【Servletの例】
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
//JavaBeansのConnectBeanクラスが属するパッケージをインポート
import Beans.*;

public class ConnectServlet extends HttpServlet {
 public void doGet(HttpServletRequest req, HttpServletResponse res)
              throws ServletException, IOException {

  String userName = req.getParameter("userName");
  //ConnectBeanクラスのオブジェクト reqObjectを宣言
  ConnectBean reqObject = null;

  -----------------------------

  //req.getAttributeメソッドで、requestスコープの
  //reqObjectオブジェクトを取得
  reqObject = (ConnectBean)req.getAttribute("reqObject");
  if (reqObject == null) {
   //reqObjectオブジェクトが生成されていない場合、生成。
   //生成されたreqObjectオブジェクトをreq.setAttribute
   //メソッドで、requestスコープとして保存。
   reqObject = new ConnectBean();
   req.setAttribute("reqObject", reqObject);
  }
  //reqObjectオブジェクトを通して、JavaBeansのアクセスメソッド
  //setUserNameを呼び出し、userNameデータを保存
  reqObject.setUserName(userName);

  -----------------------------

}
連携例
Servlet、JSP、JavaBeansの連携例について解説します。この連携例はMVC2開発モデルに沿っています。連携例のプログラム動作は以下のようになります。
1. クライアントからのリクエストをServletで受け付けます。
2. ServletとJavaBeansの連携によりクライアントからのデータをJavaBeansに保存します。
3. ServletからJSPを呼び出します。
4. JSPとJavaBeansの連携によりJavaBeansに保存されたデータをJSPから呼び出し、クライアントに表示します。
【ConnectServlet.java】クライアントからのリクエストを受付、リクエストデータをJavaBeansに保存、該当のJSPを呼び出します。
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import Beans.*;

public class ConnectServlet extends HttpServlet {
 public void doGet(HttpServletRequest req, HttpServletResponse res)
              throws ServletException, IOException {

  //(1)リクエストデータuserNameをgetParameterメソッドで取得します。
  String userName = req.getParameter("userName");
  //(2)JavaBeansのオブジェクト変数を宣言します。
  ConnectBean reqObject = null;
  ConnectBean sesObject = null;
  ConnectBean appObject = null;

  //(3)req.getAttributeメソッドで、requestスコープのreqObject
  //   オブジェクトを取得します。
  //   reqObjectオブジェクトが生成されていない場合、生成します。
  //   生成されたreqObjectオブジェクトをreq.setAttributeメソッド
  //   で、requestスコープとして保存します。
  //   reqObjectオブジェクトを通して、JavaBeansのアクセスメソッド
  //   を呼び出し、userNameデータを保存します。
  reqObject = (ConnectBean)req.getAttribute("reqObject");
  if (reqObject == null) {
   reqObject = new ConnectBean();
   req.setAttribute("reqObject", reqObject);
  }
  reqObject.setUserName(userName);

  //(4)session.getAttributeメソッドで、sessionスコープのsesObject
  //   オブジェクトを取得します。
  //   sesObjectオブジェクトが生成されていない場合、生成します。
  //   生成されたsesObjectオブジェクトをsession.setAttributeメソッド
  //   で、 sessionスコープとして保存します。
  //   sesObjectオブジェクトを通して、JavaBeansのアクセスメソッド
  //   を呼び出し、userNameデータを保存します。
  HttpSession session = req.getSession();
  sesObject = (ConnectBean)session.getAttribute("sesObject");
  if (sesObject == null) {
   sesObject = new ConnectBean();
   session.setAttribute("sesObject", sesObject); 
  }
  sesObject.setUserName(userName);

  //(5)sc.getAttributeメソッドで、applicationスコープのappObject
  //   オブジェクトを取得します。
  //   appObjectオブジェクトが生成されていない場合、生成します。
  //   生成されたappObjectオブジェクトをsc.setAttributeメソッドで、
  //   applicationスコープとして保存します。
  //   appObjectオブジェクトを通して、JavaBeansのアクセスメソッド
  //   を呼び出し、userNameデータを保存します。
  ServletContext sc = getServletContext();
  appObject = (ConnectBean)sc.getAttribute("appObject");
  if (appObject == null) {
    appObject = new ConnectBean();
    sc.setAttribute("appObject", appObject);
  }
  appObject.setUserName(userName);

  //(6)ServletからJSPを呼び出します。JSPを呼び出す際はrequestスコ
  //   ープのデータを引き継ぐ必要からforwardメソッドを使用します。
  RequestDispatcher rd 
    = req.getRequestDispatcher("./connectJsp.jsp");
  rd.forward(req, res);
 }
}
【ConnectBean.java】Servletと連携しクライアントからのデータを保存し、JSPと連携しJSPから保存したデータを参照します。
package Beans;

public class ConnectBean {

  //(1)データを保存する変数を宣言します。
  private String userName;

  //(2)変数にデータを保存するsetメソッドを宣言します。
  public void setUserName(String userName) {
    this.userName = userName;
  }

  //(3)データを参照するgetメソッドを宣言します。
  public String getUserName() {
    return this.userName;
  }
}
【connectJsp.jsp】JavaBeansからデータを参照し、表示します。
<%@ page import="Beans.*" %>

<%-- (1)各スコープのJavaBeansオブジェクトを生成します。 --%>
<jsp:useBean id="reqObject" class="Beans.ConnectBean" 
             scope="request" />
<jsp:useBean id="sesObject" class="Beans.ConnectBean" 
             scope="session" />
<jsp:useBean id="appObject" class="Beans.ConnectBean" 
             scope="application" />

<html>
<body>

<%-- (2)requestスコープを持つ、JavaBeansオブジェクトreqObjectを
        通して、JavaBeansに保存されたデータを参照します。 --%>
equestスコープのuserName:
<jsp:getProperty name="reqObject" property="userName" />
<br><br>

<%-- (3)sessionスコープを持つ、JavaBeansオブジェクトsesObjectを
        通して、JavaBeansに保存されたデータを参照します。 --%>
sessionスコープのuserName:
<jsp:getProperty name="sesObject" property="userName" />
<br><br>

<%-- (4)applicationスコープを持つ、JavaBeansオブジェクトappObject
        を通して、JavaBeansに保存されたデータを参照します。 --%>
applicationスコープのuserName:
<jsp:getProperty name="appObject" property="userName" />
<br><br>

</body>
</html>
【実行結果】Servletプログラムにデータを渡すため、URLで引き渡すデータを指定してServletプログラムにアクセスします。Servlet・JSPプログラムの実行方法に関しては、Javaの道:Tomcat(プログラム配置・実行)を参照してください。

URL:http://localhost:8080/serTest/ConnectServlet?userName=java
※ConnectServletプログラムにパラメータ名(userName)、パラメータ値(java)のデータを引き渡しています。
Javaの道_JavaBeans_実行結果
JavaBeans
1.はじめてのJavaBeans
2.JSPとJavaBeansの連携
3.Servlet、JSP、JavaBeansの連携



このページのトップへ
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道_CopyrightJavaの道