JavaBeans

JavaBeansとは?

サーブレット、JSPから呼び出し可能なJavaクラス
JavaBeansという特定のライブラリを指すのではなく、JSPから参照するクラスをJavaBeansと呼ぶ
MVCモデルで言うModelに当たり、サーバー側で動作する。

以下のルールを持たせる事でJSPからインスタンスを呼び出し可能になる。
慣例的にクラス名にBeanを付ける
・Serializableインターフェイスを実装する
・引数無しコンストラクタを定義する
・プロパティ(getter/setter)を持たせる

JSPでの使用方法

JavaBeansルールをクラスに実装する事でインスタンス化されたJavaBeansクラスをJSPで参照する事は可能だが、
以下のJavaBeansタグを用いる事で、JSP内での簡潔なクラス操作が可能
<jsp:useBean>
<jsp:setProperty>
<jsp:getProperty>

JSPからJavaBeansクラスをインスタンス化
<jsp:useBean
 id="オブジェクト名(インスタンス名)"
 class="JavaBeansクラスの完全修飾名"
 scope="スコープ" />
JSPからJavaBeans#Setプロパティを呼び出し
<jsp:setProperty
 name="オブジェクト名(インスタンス名)"
 property="プロパティ名(JavaBeansルール参照)"
 value="Setする値" />
JSPからJavaBeans#Setプロパティを呼び出し
<jsp:getProperty
 name="オブジェクト名(インスタンス名)"
 property="プロパティ名(JavaBeansルール参照)" /><br/>

JSPからのJavaBeansクラスインスタンス利用

インスタンスを呼び出し

※データ受け渡し用クラス
package myPack;
import java.io.Serializable;
public class MyBean implements Serializable {
 private String _mem;
 
 public void setMem(String prm)
 {
  this._mem = prm;
 }
 
 public String getMem()
 {
  return this._mem;
 }
}

※サーバ側(サーブレット)
package myPack;
import myPack.MyBean;
@WebServlet("/myPack/myServlet")
public class myServlet extends HttpServlet {
 @Override
 protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ~ {
  
  MyBean m = new MyBean();
  
  インスタンス変数へ、GET/POSTパラメータを格納
  m.setMem( req.getParameter("order1") );
  
  パラメータ設定(パラメータ名:prm)
  req.setAttribute("prm", m);
  ※インスタンスをJSPへ連携
  
  フォワード
  RequestDispatcher dispatcher = req.getRequestDispatcher("~.jsp");
  dispatcher.forward(req, res);
 }
}

※クライアント側(転送先パス.jsp)
<%@ page pageEncoding="UTF-8" contentType="text/html;charset=UTF-8" %>
サーバで設定したクラスの使用を定義
<jsp:useBean id="prm" class="myPack.MyBean" scope="request" />
JavaBeans」参照
<!DOCTYPE html>
<html>
<body>
 リクエストパラメータを取得
 ${param['変数名']}
 
 サーバから渡された値を取得(フォワード時のみ)
 ${requestScope['prm'].mem}
 JSPからゲッターメソッドを呼び出す場合
 ・ getを省略
 ・ get以下のメソッド名の先頭文字を小文字に

</body>
</html>

JavaBeansタグ利用

<%@ page pageEncoding="UTF-8" contentType="text/html;charset=UTF-8" %>
<%@ page import="myPack.*" %>
JavaBeansクラスをインスタンス化
<jsp:useBean id="b" class="myPack.MyBean" scope="request" />

<!DOCTYPE html>
<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 <title>商品一覧</title>
</head>
<body>
 JavaBeansクラスのSetプロパティを呼び出し
 <jsp:setProperty name="b" property="menu" value="test" />
 
 JavaBeansクラスのGetプロパティを呼び出し
 <jsp:getProperty name="b" property="menu" /><br/>
 →test
</body>
</html>