Javaに関する様々な情報をご紹介します。

3Servlet、JSP、JavaBeansの連携

Javaに関する様々な情報をご紹介します。

Servlet、JSP、JavaBeansの連携

このページでは、Servlet、JSP、JavaBeansの連携方法について解説します。

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_実行結果

3ServletとJavaBeansの連携