JSTLの<c:set>タグは、Javaでいうところの「変数を宣言して値を設定する」処理をJSP上で行うためのタグやな。
このタグで設定した変数が
「いつまで、どこまで使えるか」
という有効範囲(スコープ)を決めるのが、scope 属性の役割なんや。
この scope 属性に指定できる値は、全部で4種類あるで!
📝 4つのスコープとその有効範囲
| scope 属性の値 | 意味 | 有効範囲(寿命) |
|---|---|---|
| page | ページスコープ (デフォルト) | そのJSPファイル内だけで有効。処理が終わったら即座に消える。 |
| request | リクエストスコープ | 一つのHTTPリクエストの処理が終わるまで有効。サーブレットからJSPへの連携とかに使う。 |
| session | セッションスコープ | クライアント(ブラウザ)がサイトにアクセスしてから離脱するまで有効。ログイン状態の保持とかに使う。 |
| application | アプリケーションスコープ | サーバー(ウェブアプリ)が動いている間中ずっと有効。全てのユーザーで共有される。 |
💡 なんでスコープを指定する必要があるん?
もし scope 属性を指定せえへんかったら、デフォルトで**page スコープ**になるんや。
でも、サーブレットからJSPにデータ(例えば、データベースから取ってきた商品リストとか)を渡したい時ってあるやろ?
そういう時は、
* サーブレットでデータを**request スコープ**に入れる。
* JSPでそのデータを request スコープから取り出す。
っていう流れになるから、request スコープを使わなあかんわけや。
特定の用途に応じて、変数の「寿命」と「共有範囲」を適切に設定するために、この scope 属性はめっちゃ重要なんやで!
これで、<c:set> の使い方がバッチリわかったな!
変数の寿命をコントロールできるようになったで!