カテゴリ: jsp 更新日: 2026/01/07

JSPで変数を定義する方法まとめ!スコープと宣言場所の違いに注意

JSPで変数を定義する方法まとめ!スコープと宣言場所の違いに注意
JSPで変数を定義する方法まとめ!スコープと宣言場所の違いに注意

先生と生徒の会話形式で理解しよう

生徒

「先生、JSPで変数を定義するにはどうすればいいんですか?」

先生

「JSPでは、Javaのように変数を宣言できますが、場所やスコープによって動きが変わってきますよ。」

生徒

「スコープっていうのは、変数がどこまで使えるかってことですか?」

先生

「そのとおりです。では、JSPでの変数の定義方法とスコープの違いを具体的に見ていきましょう!」

1. JSPで変数を定義する基本の書き方

1. JSPで変数を定義する基本の書き方
1. JSPで変数を定義する基本の書き方

JSPではJavaのコードを埋め込んで変数を定義できます。変数の定義には<% %><%! %>などの特殊なタグを使います。

  • スクリプトレット<% %>の中で変数を定義すると、その処理はリクエストごとに実行されます。
  • 宣言タグ<%! %>を使うと、JSPのサーブレットクラスのメンバ変数やメソッドを定義できます。

2. スクリプトレット内での変数定義

2. スクリプトレット内での変数定義
2. スクリプトレット内での変数定義

最もよく使われるのが<% %>の中での定義です。この方法で定義した変数は、そのリクエスト処理中でのみ使用可能です。


<% 
    String name = "山田太郎"; 
%>

<p>こんにちは、<%= name %>さん!</p>

このように、<%= name %>と記述することで、変数の内容をHTMLに出力することができます。

3. 宣言タグを使った変数定義と違い

3. 宣言タグを使った変数定義と違い
3. 宣言タグを使った変数定義と違い

<%! %>を使うと、クラスレベルの変数を定義できます。これは、サーバー内で共有されるため、複数リクエストで同じ変数を使うような場面で利用されます。


<%!
    int accessCount = 0;
%>

<%
    accessCount++;
%>

<p>アクセス回数:<%= accessCount %></p>

このように書くと、アクセスするたびにaccessCountが増えていきます。ただし、マルチスレッド環境では注意が必要です。

4. JSPの変数スコープの種類

4. JSPの変数スコープの種類
4. JSPの変数スコープの種類

JSPでは変数のスコープによって、どこまでその変数が参照できるかが決まります。以下の4つが代表的なスコープです。

  • pageスコープ:そのページ内でのみ有効
  • requestスコープ:同一リクエスト内で有効
  • sessionスコープ:同一セッション内で有効
  • applicationスコープ:アプリケーション全体で共有

スコープはsetAttributegetAttributeメソッドと組み合わせて使います。

5. requestスコープでの変数の受け渡し

5. requestスコープでの変数の受け渡し
5. requestスコープでの変数の受け渡し

Servletや他のJSPから値を渡すときには、requestスコープを使うことが多いです。以下のように記述します。


request.setAttribute("username", "田中花子");

<p>ようこそ、<%= request.getAttribute("username") %>さん!</p>

このように、Servletで設定した変数をJSPで受け取って表示することができます。

6. sessionスコープの使い方と注意点

6. sessionスコープの使い方と注意点
6. sessionスコープの使い方と注意点

sessionスコープでは、ログイン情報やユーザーごとの設定など、ユーザー単位でデータを保持できます。


session.setAttribute("userId", "abc123");

<p>ユーザーID:<%= session.getAttribute("userId") %></p>

ただし、セッションの使いすぎはサーバーのメモリ負担になるため、必要なデータだけにしましょう。

7. applicationスコープで全体共有の変数を定義

7. applicationスコープで全体共有の変数を定義
7. applicationスコープで全体共有の変数を定義

applicationスコープはWebアプリケーション全体で共通のデータを扱いたいときに使います。たとえば、全体の利用者数など。


application.setAttribute("totalAccess", 100);

<p>現在のアクセス合計:<%= application.getAttribute("totalAccess") %></p>

このように定義した変数は、全ユーザーからアクセス可能になります。ただし、書き換えには同期処理が必要なケースもあるため注意です。

8. 変数のスコープと宣言場所の違いを整理しよう

8. 変数のスコープと宣言場所の違いを整理しよう
8. 変数のスコープと宣言場所の違いを整理しよう

JSPで変数を定義する際には、次の3つの観点で理解するとわかりやすくなります。

  • どこで定義するか<% %><%! %>
  • どこまで有効か(スコープ)
  • どのように共有されるか(page/request/session/application)

宣言場所とスコープが混同されやすいので、それぞれの役割と適切な使い分けを意識することが大切です。

9. JSPの変数定義に関するよくある間違い

9. JSPの変数定義に関するよくある間違い
9. JSPの変数定義に関するよくある間違い

初心者がやりがちなミスをいくつか紹介しておきます。

HTMLとJavaコードの混在による構文エラー

JSPではHTMLとJavaを混ぜて書くため、セミコロンの忘れ<% %>の閉じ忘れなどに注意が必要です。

スコープの誤用

変数のスコープを誤って設定すると、値が取得できなかったり、意図しない結果になることがあります。

宣言タグの使いすぎ

<%! %>で変数を定義しすぎると、状態がサーバーに残り続け、スレッドセーフでなくなるリスクがあります。

10. JSTLやEL式を使った代替方法

10. JSTLやEL式を使った代替方法
10. JSTLやEL式を使った代替方法

最近のJSP開発では、<% %>などのスクリプトレットを避け、JSTL(JSP Standard Tag Library)やEL式(Expression Language)を使うのが一般的です。

EL式を使えば、より見やすく、保守性の高いコードが書けます。


<p>ようこそ、${sessionScope.username} さん!</p>

このように、変数の扱いをスッキリと記述できるのが特徴です。

関連記事:
カテゴリの一覧へ
新着記事
Springの@Transactional徹底解説!トランザクションの伝播・分離レベル・タイムアウトの基本
JavaのHashMapクラスgetメソッドの使い方を完全ガイド!初心者でもわかるjava.util入門
Thymeleafのth:fragmentを使ったテンプレートの再利用方法を完全ガイド!初心者でもわかる使い方
Javaの@PathVariableアノテーションの使い方を徹底解説!初心者でもわかるパスパラメータの基本と応用
人気記事
No.1
Java&Spring記事人気No1
Javaのラムダ式で配列を扱う!Arrays.streamの基本と注意点を初心者向けに解説
No.2
Java&Spring記事人気No2
JavaのRuntimeExceptionを完全解説!初心者でもわかるjava.langパッケージの基礎
No.3
Java&Spring記事人気No3
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.4
Java&Spring記事人気No4
JavaのIntegerクラスの使い方を完全ガイド!初心者でもわかる整数操作
No.5
Java&Spring記事人気No5
JavaのBigDecimalクラスcompareToメソッド完全ガイド!初心者でもわかる大小比較の基本
No.6
Java&Spring記事人気No6
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.7
Java&Spring記事人気No7
JavaのHttpSessionを徹底解説!初心者でもわかるセッション管理の基本
No.8
Java&Spring記事人気No8
Javaの@SuppressWarningsアノテーションの使い方を完全ガイド!初心者でもわかる警告の抑制方法