JakartaEE JSPのリクエスト属性とスコープの基本を徹底解説!初心者向け入門ガイド
生徒
「先生、JakartaEEのJSPでリクエスト属性とかスコープっていう言葉をよく見かけるんですが、いまいち違いがわからないんです。」
先生
「いい質問だね。JSPではデータをページ間で受け渡したり、セッション単位で保持したりする仕組みがあって、それをリクエスト属性やスコープと呼ぶんだよ。」
生徒
「スコープって複数あるんですか?」
先生
「その通り。リクエストスコープ、セッションスコープ、アプリケーションスコープの三種類がよく使われるんだ。順番に基本から見ていこう。」
1. JakartaEE JSPにおけるリクエスト属性とは?
JakartaEEのJSPでは、リクエスト属性を使ってサーブレットからJSPへデータを受け渡すことができます。例えばフォームの入力値や検索結果などをサーブレットで処理し、その結果をJSPに表示する場合に役立ちます。リクエスト属性は、HttpServletRequestオブジェクトのsetAttributeメソッドで保存し、JSP側ではgetAttributeで取り出せます。
request.setAttribute("userName", "太郎");
RequestDispatcher dispatcher = request.getRequestDispatcher("result.jsp");
dispatcher.forward(request, response);
ようこそ、<%= request.getAttribute("userName") %> さん!
リクエスト属性は一度のリクエスト処理の間だけ有効で、リダイレクトすると消えてしまいます。この特徴を理解することで、誤ったデータ保持を防げます。
2. JSPのスコープの種類と基本
JSPのスコープはデータをどの範囲で保持するかを示す考え方です。初心者が理解すべきポイントは、スコープによってデータの寿命と共有範囲が異なるという点です。
- リクエストスコープ:1回のリクエスト処理の間だけ有効。
- セッションスコープ:ユーザーごとのブラウザセッション中有効。
- アプリケーションスコープ:サーバー全体で共有、アプリケーションが稼働している間有効。
3. セッションスコープの使い方
セッションスコープは、ログインユーザーの情報を保持する際によく使われます。セッションオブジェクトを使えば、同じユーザーの複数リクエストにわたってデータを保持できます。
HttpSession session = request.getSession();
session.setAttribute("loginUser", "太郎");
ログイン中のユーザー:<%= session.getAttribute("loginUser") %>
セッションスコープは便利ですが、使いすぎるとメモリを圧迫するため、必要な情報だけを保持するように心がけましょう。
4. アプリケーションスコープの使いどころ
アプリケーションスコープはサーバー全体で共有されるため、すべてのユーザーに共通のデータを扱うときに使います。例えばアプリケーション全体の設定値や統計データを保持する用途があります。
ServletContext context = getServletContext();
context.setAttribute("appTitle", "サンプルアプリ");
<%= application.getAttribute("appTitle") %>
アプリケーションスコープは全ユーザー共通なので、ユーザーごとの状態管理には向きません。その違いを理解することで、効率的にデータを扱えます。
5. リクエスト属性とスコープの実践的な使い分け
初心者がつまずきやすいのは「どのスコープを選べばいいのか」という点です。リクエスト属性は一時的なデータ渡し、セッションスコープはユーザー固有のデータ保持、アプリケーションスコープは全体共有と覚えておくと整理しやすいです。
例えば検索結果を表示する場合はリクエスト属性、ログイン情報はセッションスコープ、サイト全体のアクセスカウンタはアプリケーションスコープを使うと良いでしょう。
6. JSPにおけるEL式との関係
JSPではExpression Language(EL式)を使うことで、スコープのデータをより簡単に参照できます。リクエストスコープやセッションスコープの値を直接JSPに埋め込めるため、コードがシンプルになります。
<p>ようこそ、${userName} さん!</p>
<p>ログインユーザー:${sessionScope.loginUser}</p>
EL式を活用することで、可読性が高まり、ビジネスロジックと表示の分離がしやすくなります。これもJakartaEE JSPで学んでおくべき大切な基本です。