EL式で値を取得する基本!リクエストやセッションから取り出す方法
生徒
「先生、EL式って便利そうですが、リクエストスコープやセッションスコープの値を取り出す方法がよく分かりません…」
先生
「それは大事なポイントですね。EL式では、JSPのリクエストやセッションなどのスコープから、変数を簡単に取得できますよ。」
生徒
「スクリプトレットよりも書き方がシンプルなんですか?」
先生
「そのとおりです。では、EL式での値の取得方法を基本からじっくり確認していきましょう。」
1. EL式で値を取得する基本構文とは?
EL式(Expression Language)は、${}という記法でJSP上の変数を簡単に参照できる仕組みです。Javaコードを直接書かずに、画面に値を表示することができるため、初心者にも扱いやすい特徴があります。
基本的な構文は以下のようになります。
<p>こんにちは、${userName} さん!</p>
userNameという変数がスコープの中に存在すれば、自動的にその値が表示されます。
2. リクエストスコープからの値の取得方法
リクエストスコープは、HTTPリクエストごとに生成される一時的なスコープです。フォームから送信されたデータやServletから渡された値を一時的に保持するのに使います。
Servletで値を設定するには以下のようにします。
request.setAttribute("userId", "abc123");
そして、JSPでは次のようにEL式で取得します。
ユーザーID:${userId}
このように、request.getAttribute()を使う代わりに、より簡潔に記述できるのがEL式の魅力です。
3. セッションスコープからの値の取り出し
セッションスコープは、ユーザーごとの情報を保持するために使われるスコープです。ログイン情報や選択内容などを保存するのに向いています。
Servletで値を保存する例は以下の通りです。
session.setAttribute("loginUser", "田中太郎");
JSPでは、EL式を使って次のように表示します。
ログイン中のユーザー:${loginUser}
このように、セッションに格納された情報も${}で簡単に取得できます。
4. スコープを明示してアクセスする方法
同じ変数名が複数のスコープに存在する場合、EL式はスコープの優先順位に従って探します。しかし、明示的にスコープを指定することもできます。
スコープを明確に指定する場合は、次のように書きます。
${requestScope.userId}
${sessionScope.loginUser}
こうすることで、どのスコープから取得するのかを明確に指定でき、意図しない値の取得を防ぐことができます。
5. リストやマップからの値の取得
ServletからJSPに渡されたListやMapの中身も、EL式で取り出すことが可能です。以下はその一例です。
Mapから値を取り出す方法:
Map<String, String> userInfo = new HashMap<>();
userInfo.put("email", "taro@example.com");
request.setAttribute("userMap", userInfo);
JSP側では次のように取得できます。
メールアドレス:${userMap["email"]}
Listから値を取り出す方法:
最初の項目:${itemList[0]}
このように、EL式では配列やコレクションにも柔軟にアクセス可能です。
6. nullや空の判定に使えるempty演算子
EL式では、変数がnullや空かどうかを簡単に判定するためにempty演算子を使うことができます。
次のように記述すると、userIdが存在しない(空またはnull)の場合に判定できます。
<c:if test="${empty userId}">
ユーザーIDが設定されていません。
</c:if>
これにより、nullチェックを簡潔に書けるので、JSPがすっきりします。
7. request.getAttribute()との違いを理解しよう
従来のJSPでは、値を取得するのにrequest.getAttribute("key")というJavaコードを使っていました。しかし、EL式ではそれをもっと簡単に書くことができます。
従来の書き方:
<% String name = (String) request.getAttribute("name"); %>
<p>名前:<%= name %></p>
EL式を使った書き方:
<p>名前:${name}</p>
このように、コード量が減るだけでなく、HTMLとの混在も減って可読性が向上します。
8. JSTLと組み合わせた活用例
EL式は、JSTL(JSP Standard Tag Library)と一緒に使うことで、さらに柔軟でわかりやすいテンプレート構築が可能になります。
たとえば、セッションスコープの値をもとに表示を切り替えるには、以下のように記述します。
<c:if test="${not empty sessionScope.loginUser}">
ようこそ、${sessionScope.loginUser}さん
</c:if>
このように、EL式とJSTLはセットで使うことで、ロジックと表示をすっきり分けることができます。
9. EL式で値が見つからないときの挙動
EL式で指定した変数がスコープ内に存在しない場合、エラーにはなりません。代わりにnullが評価されます。例えば次のように表示されます。
ユーザー名:${notExistName}
この場合、画面には何も表示されません。値が存在するか確認するには、emptyやnot emptyを併用するとよいでしょう。
10. EL式で値を取得する設計のポイント
EL式で値を取得するときは、以下のような点に気をつけることで、JSPの保守性や再利用性が高まります。
- 値の格納はController(Servlet)側で行う
- JSPではEL式のみで表示を行い、Javaロジックは書かない
- 同じ名前の変数が複数のスコープに存在しないように注意する
- JSTLと一緒に使って表示制御を整理する
こうした設計を意識することで、開発効率も品質も向上します。