LoginSignup
0
0

スクリプトレットとJSTLを使ったスコープの保存とEL式の出力

Last updated at Posted at 2023-10-04

スコープとは保存する領域の事

JSP,サーブレットではスコープと呼ばれるデータの保存場所がある。
データといっても、インスタンスのみが保存できるため
int型やdouble型のような基本データ型はラッパークラスとして保存する。

スコープは4種類ある

スコープには次の4種類が準備されている。
・ ページスコープ
・ リクエストスコープ
・ セッションスコープ
・ アプリケーションスコープ
それぞれ保存できる期間に違いがあるが、ここでは割愛する。

各スコープへの保存方法とEL式での出力

.jsp
<!--◆スクリプトレットを使った保存-->
<!-- ページスコープ -->
  <% pageContext.setAttribute("text1","page scopeに保存1"); %>
<!-- リクエストスコープ -->
  <% request.setAttribute("text1","request scopeに保存1"); %>
<!-- セッションスコープ -->
  <% session.setAttribute("text1","session scopeに保存1"); %>
<!-- アプリケーションスコープ -->
  <% application.setAttribute("text1","application scopeに保存1"); %>

<!--◆JSTLのcoreを使った保存 -->
<!--ページスコープ -->
  <c:set var="text2" value="page scopeにJSTLで保存2" scope= "page"/>
  <c:set var="text2" value="page scopeにJSTLで保存上書き" />
<!--リクエストスコープ -->
  <c:set var="text2" value="request scopeにJSTLで保存2" scope= "request"/>
<!--セッションスコープ -->
  <c:set var="text2" value="session scopeにJSTLで保存2" scope= "session"/>
<!--アプリケーションスコープ -->
  <c:set var="text2" value="application scopeにJSTLで保存2" scope= "application"/>

◆EL式を使った出力<br>
${text1}<br>
${pageScope.text1}<br>
${requestScope.text1}<br>
${sessionScope.text1}<br>
${applicationScope.text1}<br>
<br>
${text2}<br>
${pageScope.text2}<br>
${requestScope.text2}<br>
${sessionScope.text2}<br>
${applicationScope.text2}<br>

下記が上記コードの出力結果。

実行結果
page scopeに保存1
page scopeに保存1
request scopeに保存1
session scopeに保存1
application scopeに保存1

page scopeにJSTLで保存上書き
page scopeにJSTLで保存上書き
request scopeにJSTLで保存2
session scopeにJSTLで保存2
application scopeにJSTLで保存2

実行結果の補足

・JSTLのcoreを使った保存でscopeを省いた場合。
「JSTLのcoreを使った保存」の「ページスコープ」でscopeを省いても問題なく実行できる。
この時、値はページスコープに保存されていることが分かる。
また、「page scopeにJSTLで保存2」が出力されておらず「page scopeにJSTLで保存上書き」が出力されている。
これより、「JSTLのcoreを使った保存」で同じ「var」を使用すると上書きされることが分かる。

・EL式の出力でスコープを省いた場合
EL式の出力はスコープを明示する暗黙オブジェクトを使うことで、どのスコープのデータか指定できる。
スコープを使わない場合、次のスコープの順にオブジェクトを探し、最初に見つかったデータを出力する。
page→request→session→application

その他補足

・スクリプトレットの変数をEL式で使う
スクリプトレットで作成した変数をEL式で使うには、スコープに保存する必要がある。
(上記「スコープとは保存する領域の事」で記載した通り、EL式はスコープ内のデータを扱うため)

・EL式内の「"文字"」の使い方
EL式内に文字を入力し、「"」で囲むと、文字(Stringのイメージ)として出力される。
一方で、EL式内にMAPクラス等のキーを指定する場合は${クラス名.["文字"]}と書くことができる。
この時の"文字"は、MAPのキーとして使用される。
単純に文字を出力する場合、、MAPのキーとして使う場合、どちらも「"」で囲んでいるが結果が異なることに注意する。

こちらのページを参考にしました。
http://www.visards.co.jp/java/jstl/jstl05.html

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0