40日目(2025.03.11) アクションタグとスコープ
今回は「アクションタグとスコープ」ということで、菅原先生、よろしくです!!
【勉強動画】
すがチャン様
カウンターを動かしてスコープの違いを理解しよう【JavaWeb入門講座13】アクションタグとスコープ
★アクションタグを使うと、JSPからBeanを呼び出して使うことができる。
【アクションタグとは】
特定の処理を実行するためのJSPタグ
【useBeanタグ】
指定したスコープのBeanオブジェクトを取得する。
Beanオブジェクトが無ければ、新規生成してスコープに格納する。
<jsp:useBean id=”参照名” scope=”有効範囲” class=”Beanのクラス名” />
タグ名=jsp:useBean
★よく使う属性は3つ
①id属性 → Beanオブジェクトの参照名を指定
②scope属性 → Beanオブジェクトを探しにいくスコープを指定
③class属性 → Beanオブジェクトのclass名を指定
★スコープとは
対象のオブジェクトを使える有効範囲のこと
生成したBeanオブジェクトがどれくらいの期間、サーバ上にメモリが保存されているのかを指定する
⇓
★スコープは4種類ある
①page → JSPページの中で有効(今のJSPから別のJSPを呼び出す。次のJSPを処理する時にはスコープの情報は消えている)
②request → レスポンスを返すまで有効
③session → セッションが破棄されるまで有効
④application → webサーバが稼働している間は有効
【useBeanタグの記述例】
<jsp.useBean id=”cnt” scope=”session” class=”bean.CounterBean” />
useBeanタグを使うことで、以下の処理を行ってくれる
このタグを実行した時にはまだsessionの中にCounterBeanのオブジェクトは入っていない
⇓
オブジェクトを生成
⇓
オブジェクトの変数名として、「cnt」という名前を付ける
⇓
生成したオブジェクト(cnt)をsessionスコープに格納する
なお、このuseBeanタグをJavaのソースコードに置き換えると、、、
<%
bean.CounterBean cnt = (bean.CounterBean)session.getAttribute(“cnt”)
if(cnt == null){
cnt = new bean.CounterBean();
session.setAttribute(“cnt” , cnt);
}
%>
といった感じになるとのこと。
★useBeanタグを使った際のイメージ図

【useBeanタグと組み合わせで使うアクションタグ】
useBeanタグで指定したオブジェクトが持っているメンバ変数に対して、
・値を設定(setPropertyタグ)
・値を取得(getPropertyタグ)
するためのタグ
【setPropertyタグ】
Beanが持っているsetterメソッドを呼び出す
★プロパティ
Beanが持っているsetterメソッドやgetterメソッドを併せ持つメンバ変数のこと
<jsp:setProperty name = “参照名” prpperty=”プロパティ名” value=”値” />
参照名=useBeanタグのid属性と同じ
プロパティ名=メンバ変数の名前
【setPropertyタグの記述例】
<jsp:setProperty name=”cnt” property=”count” value=”1″ />
→ 実行するとオブジェクトの「count」の中に「1」が入る
javaのソースコードに置き換えると、、、
<%
cnt.setCount(1);
%>
といった感じ
【get Propertyタグ】
getterメソッドを呼び出す
<jsp:getProperty name=”参照名” property=”プロパティ名” />
【get Propertyタグの記述例】
<jsp:getProperty name=”cnt” property =”count” />
Javaのソースコードに置き換えると、、、
<% = cnt.getCount() %>
といった感じ。
なお、菅原先生は補足として、Beanがもつプロパティの値はEL式を使って出力ができるという紹介をしてくださりました。
菅原先生は「興味があったら調べてみてください」おっしゃっていたので自分で予想したうえで調べてみました。
(予想)
${cnt = getCount()}
(正解)
${cnt.count}
はい、完全に予想が外れたわけですが、EL式を使うことで簡潔で、可読性があがります!!
積極的に使っていきます!!
【他のアクションタグ(一部)】
<jsp:include page=”ファイルのURL” />
→ JSPファイルの内に他のファイルを挿入する
<jsp.forward page=”ファイルのURL />
→ 他のファイルに転送(フォワード)する
※他にもJSP2.0でいくつかのタグが追加されている
【実際にコーディング】
(JSP)

(Bean)


おおー!!
ちゃんと表示されました!!!
しかしこのままだとブラウザの更新をしてもずっと「1回目」となり、カウントされず、、
これはスコープを「request」としているからなので、「session」に変更!!


うむ!!
ブラウザの更新をしたらちゃんとカウントが増えていきました!!
でも、別のブラウザを立ち上げて、URLを入れると、、、

またまた1回目になりました!!
そこで、スコープを「application」とすると、、、

別ブラウザも連動してカウントされるようになりました!!
というわけで、引き続き
楽しんでいこう!!!