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」とすると、、、

別ブラウザも連動してカウントされるようになりました!!

というわけで、引き続き

楽しんでいこう!!!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です