JavaA2Z

KAB-studio > プログラミング > JavaA2Z > JavaBeansとは

JavaBeans

日本語 珈琲豆
英語 java beans
ふりがな じゃばびーんず、じゃう゛ぁびーんず
フリガナ ジャバビーンズ、ジャヴァビーンズ

解説

画面表示に使用する「部品」クラスの仕様。
 
Javaにおいて最も分かりにくい仕様のひとつ。
画面表示に使用するクラスを、「部品」として再利用できるようにするため決められた「仕様」が「JavaBeans」である。
JavaBeansの仕様に則して作られたクラスを「Java Bean」もしくは単に「Bean」「ビーン」と呼ぶ。
 
「画面表示」とは広義のGUIを指し、ウィンドウアプリケーションからWebアプリケーションまで含む。また、直接画面表示をする必要はなく、「画面表示のための部品となるクラス」であればなんでも当てはまる。
実際、現在最も使用頻度の高いJavaBeansの使用方法は、Webアプリケーションでの利用である。
サーブレット側で「画面に出力するための情報」をJava Beanクラスに格納し、HttpServletRequestインターフェイスHttpSessionインターフェイスのsetAttribute()メソッドで名前を付けてセットすることで、JSP側で<jsp:useBean>JSPタグでそのまま変数として使用することができる。
この使用例では、Java Beanクラスは「データクラス」としての利用であり、画面表示を直接っているわけではない。このような利用方法もJavaBeansに当てはまる。
 
JavaBeansの仕様では、Java Beanクラスは「プロパティ」を持つ。
プロパティとは「フィールドgetter/setterの組み合わせ」のことである。
このgetter/setterメソッド名は、必ず「フィールド名の頭文字大文字にし、その前にget/setを付けたもの」とする必要がある。
たとえば、フィールド名が「valueData」であれば、getterは「getValueData()」、setterは「setValueData()」というメソッド名となる。
 
このプロパティの命名規則は非常に重要である。それは、リフレクションによって「プロパティ名」を指定することで「getter/setter呼び出す」という処理をうことが多いためである。
そのため、プロパティ名を元にgetter/setterを作らないと、適切なメソッドが呼び出せなくなってしまう。
この「プロパティ」の存在はJava Beanクラスにおいて最も特徴的な仕様であり、「プロパティさえ存在すればJava Beanクラスである」とさえ言われるほどである。
 
もうひとつ、JavaBeansの仕様では、Java Beanクラスは「直列化可能」である必要がある。
Java Beanクラスは、プロパティに格納した情報を保存できる必要があるため、Serializableインターフェイス実装クラスとする必要がある。
ただし、これは絶対必要な条件ではない。実際、通常のサーブレットJSPで使用する場合には直列化可能である必要はない。
ただし、システムによっては必要不可欠であるため、Serializableインターフェイス実装クラスとしておいた方が安全だろう。
 
JavaBeansは、そもそも、WindowsにおけるOCXやActiveXのような「画面のコンポーネント」に対抗する仕様として作られている。そのため、仕様書等にはGUIでの利用を前提に書かれているものが多い。
しかし、Javaの主な使用目的がWebアプリケーションとなっている現在では、GUIコンポーネントとしての利用はあまりわれていない。
現在は「単なるデータクラス」として使われる事もあり、これが「JavaBeansとはなんなのか」という点を分かりにくくしている。
現実的には「JSPで使用する、プロパティを持つクラス」がJava Beanクラスの一般的な定義となっている。細かい仕様にこだわるときりがなく、また、非常に便利でよく利用するもののため、深く考えずに利用するのがいいだろう。

参考サイト


(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

<%-- webapps/sample-servlet/WEB-INF/jsp/sample.jsp --%>
<%@ page contentType="text/html; charset=Windows-31J" pageEncoding="Windows-31J" %>
<%--
    pageEncodingには、このファイルを保存した時の文字コードを指定してください。 
    Windowsであれば"Windows-31J"を指定すればいいでしょう。
--%>

<jsp:useBean id="sample_bean" class="bean.SampleBean" scope="request"/>
<%--
    SampleServletでセットしたJava Beanを取得します。 
    idでは、HttpServletRequestインターフェイスかHttpSessionインターフェイスの
    setAttribute()メソッドの第1引数で渡した文字列を指定します。
    classで、第2引数で渡したクラスを指定します。
    scopeでスコープをセットします。HttpServletRequestを使用した場合にはrequest、
    HttpSessionを使用した場合はsessionを指定します。
--%>

<html>
<head>
<title>JSPのサンプル</title>
</head>
<body>

<%
    // <jsp:useBean>のidで指定した名前が、そのまま変数名となります。
    // この変数名で、サーブレット側でセットしたデータにアクセスできます。
    int i = sample_bean.getData();
    out.println( i );
    // 100
%>

</body>
</html>


// webapps/sample-servlet/WEB-INF/src/SampleServlet.java
// http://localhost:8080/sample-servlet/servlet/SampleServlet でアクセスできます。
// このサンプルプログラムは「サーブレット」の項目に書かれている準備を行ってから使用してください。
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import bean.SampleBean;

/**
*   サーブレットのテスト。
*/
public class SampleServlet extends HttpServlet
{
    /**
     * リクエストとしてHTTPメソッドのGETが渡されるとこのメソッドが呼ばれます。
     */
    public void doGet( HttpServletRequest request, HttpServletResponse response ) throws IOException, ServletException
    {
        System.out.println( "SampleServlet#doGet()" );

        // Content-Typeをセット。
        response.setContentType( "text/html;charset=Windows-31J" );

        // SampleBean Java Beanクラスを作成し、JSPで使えるようにセットします。
        SampleBean sampleBean = new SampleBean();
        sampleBean.setData( 100 );
        request.setAttribute( "sample_bean", sampleBean );

        // サーブレットコンテキストを取得します。
        ServletContext servletContext = getServletContext();
        // リクエストディスパッチャーを取得します。
        RequestDispatcher requestDispatcher = servletContext.getRequestDispatcher( "/WEB-INF/jsp/sample.jsp" );
        // 指定したJSPへと転送します。
        requestDispatcher.forward( request, response );
    }
}



// webapps/sample-servlet/WEB-INF/src/bean/SampleBean.java
package bean;
// Java Beanは、JSPで使用する関係でパッケージに入れる必要があります。
// ここではbeanパッケージに入れます。

// 一応、Java Beanは直列化可能にする必要があります。
// 実際には必要ない場合も多いですが。
import java.io.Serializable;

/**
*   SampleServletで使用するJava Beanクラスです。
*/
public class SampleBean implements Serializable
{
    /**
    *    プロパティ。
    */
    private int data;

    /**
    *   コンストラクタ。
    */
    public SampleBean()
    {
        data = 0;
    }

    /**
    *    プロパティのgetter。
    */
    public int getData()
    {
        return data;
    }

    /**
    *    プロパティのsetter。
    */
    public void setData( int value )
    {
        this.data = value;
    }
}
<%-- webapps/sample-servlet/WEB-INF/jsp/sample.jsp --%>
<%@ page contentType="text/html; charset=Windows-31J" pageEncoding="Windows-31J" %>
<%--
    pageEncodingには、このファイルを保存した時の文字コードを指定してください。 
    Windowsであれば"Windows-31J"を指定すればいいでしょう。
--%>

<jsp:useBean id="sample_bean" class="bean.SampleBean" scope="request"/>
<%--
    SampleServletでセットしたJava Beanを取得します。 
    idでは、HttpServletRequestインターフェイスかHttpSessionインターフェイスの
    setAttribute()メソッドの第1引数で渡した文字列を指定します。
    classで、第2引数で渡したクラスを指定します。
    scopeでスコープをセットします。HttpServletRequestを使用した場合にはrequest、
    HttpSessionを使用した場合はsessionを指定します。
--%>

<html>
<head>
<title>JSPのサンプル</title>
</head>
<body>

<%
    // <jsp:useBean>のidで指定した名前が、そのまま変数名となります。
    // この変数名で、サーブレット側でセットしたデータにアクセスできます。
    int i = sample_bean.getData();
    out.println( i );
    // 100
%>

</body>
</html>


// webapps/sample-servlet/WEB-INF/src/SampleServlet.java
// http://localhost:8080/sample-servlet/servlet/SampleServlet でアクセスできます。
// このサンプルプログラムは「サーブレット」の項目に書かれている準備を行ってから使用してください。
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import bean.SampleBean;

/**
*   サーブレットのテスト。
*/
public class SampleServlet extends HttpServlet
{
    /**
     * リクエストとしてHTTPメソッドのGETが渡されるとこのメソッドが呼ばれます。
     */
    public void doGet( HttpServletRequest request, HttpServletResponse response ) throws IOException, ServletException
    {
        System.out.println( "SampleServlet#doGet()" );

        // Content-Typeをセット。
        response.setContentType( "text/html;charset=Windows-31J" );

        // SampleBean Java Beanクラスを作成し、JSPで使えるようにセットします。
        SampleBean sampleBean = new SampleBean();
        sampleBean.setData( 100 );
        request.setAttribute( "sample_bean", sampleBean );

        // サーブレットコンテキストを取得します。
        ServletContext servletContext = getServletContext();
        // リクエストディスパッチャーを取得します。
        RequestDispatcher requestDispatcher = servletContext.getRequestDispatcher( "/WEB-INF/jsp/sample.jsp" );
        // 指定したJSPへと転送します。
        requestDispatcher.forward( request, response );
    }
}



// webapps/sample-servlet/WEB-INF/src/bean/SampleBean.java
package bean;
// Java Beanは、JSPで使用する関係でパッケージに入れる必要があります。
// ここではbeanパッケージに入れます。

// 一応、Java Beanは直列化可能にする必要があります。
// 実際には必要ない場合も多いですが。
import java.io.Serializable;

/**
*   SampleServletで使用するJava Beanクラスです。
*/
public class SampleBean implements Serializable
{
    /**
    *    プロパティ。
    */
    private int data;

    /**
    *   コンストラクタ。
    */
    public SampleBean()
    {
        data = 0;
    }

    /**
    *    プロパティのgetter。
    */
    public int getData()
    {
        return data;
    }

    /**
    *    プロパティのsetter。
    */
    public void setData( int value )
    {
        this.data = value;
    }
}

この単語を含むページ

「みだし」に含まれているページ

「サンプルプログラムとか」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2005/09/09
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。