JakartaEE JSPの宣言・式・スクリプトレットを完全解説!初心者でもわかる違いと使い分け
生徒
「先生、JakartaEEのJSPには宣言タグとか式タグとかスクリプトレットっていうのがあると聞いたんですが、それぞれどう違うんですか?」
先生
「とても重要なところですね。宣言は変数やメソッドを定義するとき、式は値を出力するとき、スクリプトレットは処理の流れを埋め込みたいときに使います。」
生徒
「似ているけれど役割が全然違うんですね。具体例で見てみたいです!」
先生
「では、宣言・式・スクリプトレットの違いを実際のサンプルと一緒に学んでいきましょう。」
1. 宣言(<%! %>)とは
宣言タグは、<%! %>で囲んで使用し、JSPページ内で変数やメソッドを定義するときに使います。これらはサーブレットに変換された際にクラスのメンバーとして扱われます。
<%!
private int counter = 0;
public String greet(String name) {
return "こんにちは、" + name + "さん!";
}
%>
<html>
<body>
<p><%= greet("花子") %></p>
<p>アクセス回数: <%= ++counter %></p>
</body>
</html>
このように宣言タグを使うと、JSP全体で利用できる変数やメソッドを作成できるため、複数箇所で共通の処理を呼び出すときに便利です。
2. 式(<%= %>)とは
式タグは、<%= %>で囲んで記述し、値を直接出力するために使います。Javaの式を評価した結果が、そのままHTMLに出力されます。
<html>
<body>
<p>現在の時刻は <%= new java.util.Date() %> です。</p>
<p>1 + 2 = <%= 1 + 2 %></p>
</body>
</html>
上記のように、変数の値や計算結果、メソッドの戻り値を簡単にHTMLに埋め込めます。文字列連結や数値演算の結果を画面に出すときによく使います。
3. スクリプトレット(<% %>)とは
スクリプトレットは、<% %>で囲んで記述し、処理の流れを制御するJavaコードを埋め込むために使います。if文やfor文などを利用して動的にHTMLを生成できます。
<html>
<body>
<%
for (int i = 1; i <= 3; i++) {
%>
<p>番号: <%= i %></p>
<%
}
%>
</body>
</html>
このようにループ処理をJSPに直接書くことができるため、繰り返し表示や条件分岐を実現できます。ただし、ビジネスロジックをJSPに書きすぎると保守性が下がるので、必要最低限にとどめることが推奨されます。
4. 宣言・式・スクリプトレットの違いを整理しよう
ここまで見てきた宣言・式・スクリプトレットは似ているように見えて、役割が明確に分かれています。
- 宣言(<%! %>) … 変数やメソッドを定義して再利用可能にする。
- 式(<%= %>) … 値を評価して直接出力する。
- スクリプトレット(<% %>) … if文やfor文など処理の流れを記述する。
初心者はまずこの三種類を区別して使えるようになることが、JakartaEEのJSPを理解する第一歩です。
5. 初心者が押さえるべきポイント
JSPを学ぶときにありがちなつまずきは、宣言タグと式タグを混同してしまうことです。例えば「値を表示したい」ときに宣言タグを使ってしまうと、出力が行われないため意図した結果が得られません。
また、スクリプトレットは便利ですが、多用するとHTMLとJavaコードが混ざりすぎて読みにくくなります。そのため、実際の開発ではできるだけロジックをサーブレットやJavaクラスに移し、JSPは画面表示に専念させることが推奨されます。
それでも初心者が学習する段階では、この三つの違いを理解して実際に動かすことが大切です。検索エンジンでも「JSP 宣言 式 スクリプトレット 違い」といったキーワードで多く検索されるため、基礎をきちんと整理して覚えておくと安心です。
まとめ
JakartaEEのJSPにおける宣言・式・スクリプトレットは、初心者が最初につまずきやすい重要なポイントですが、三つの役割が明確に分かれていることが理解できれば、JSPの構造や動作の仕組みがぐっと分かりやすくなります。宣言(<%! %>)は変数やメソッドをページ全体で利用可能にするための定義部分で、サーブレット変換後はクラスメンバーとして扱われます。一方で式(<%= %>)は単に「値を画面に出力する」ための構文であり、計算結果やメソッドの戻り値を簡潔に埋め込めます。そしてスクリプトレット(<% %>)は処理の流れ自体をページ内に記述したいときに用いられ、for文やif文を使った動的表示が可能になります。 これらの三種類は見た目が似ているため混同しがちですが、書かれたJavaコードがどこで実行されるのか、またレスポンスの生成にどのように関わるのかを理解することが非常に重要です。JSPはサーブレットに変換されて動作するため、どのタグがメンバーとして扱われ、どのタグが画面出力に関わるのかを意識することが、後々の保守性や開発効率に大きな影響を与えます。特に宣言タグと式タグは役割が全く異なるため、「定義」と「出力」の違いを明確に区別しておくことが大切です。また、スクリプトレットは便利ですが必要以上に使うとHTMLとロジックが混ざり可読性が低下するため、最低限の利用に抑えることが推奨されます。 ここではこれらの違いを整理しながら、それぞれを組み合わせたJSPのサンプルコードを振り返りとしてまとめています。
宣言・式・スクリプトレットを組み合わせたサンプルコード
<%!
private int count = 0;
public String greet(String name) {
return "ようこそ " + name + " さん";
}
%>
<html>
<body>
<%
String[] items = { "りんご", "みかん", "ぶどう" };
%>
<h2><%= greet("太郎") %></h2>
<p>訪問回数: <%= ++count %></p>
<h3>商品一覧</h3>
<%
for (int i = 0; i < items.length; i++) {
%>
<p>商品名: <%= items[i] %></p>
<%
}
%>
</body>
</html>
このサンプルでは宣言タグでメンバー変数とメソッドを定義し、式タグではメソッドの呼び出しや変数値の出力を行っています。またスクリプトレットのfor文を使って商品名を繰り返し表示しています。こうして比較すると、三つのタグがそれぞれ異なる役割を担っていることがよく分かります。この違いを理解しておくことで、JSPページをより構造的に記述でき、動的コンテンツを効率的に生成できるようになります。 さらに、JSPを学ぶ段階ではこうしたタグの正しい使い分けを覚えることが不可欠ですが、実務ではJSTLやEL式が主流となるため、スクリプトレットを避け、より表現力の高いテンプレート記述へ移行するのが一般的です。しかし、JSPの仕組みを根本から理解しておくことで、後に登場する技術の原理や動作も直観的に把握できるようになり、開発力の基礎固めにつながります。宣言・式・スクリプトレットは、JakartaEEやサーブレットの理解を深めるための非常に良い入口となるでしょう。
生徒:「宣言・式・スクリプトレットの違いがやっと分かりました!見た目は似ているけど役割が全然違うんですね。」
先生:「そのとおりです。特に宣言タグはクラス全体に関わる処理なので、式タグとは用途が大きく異なります。」
生徒:「式タグは値の出力、スクリプトレットは処理の流れっていう整理もすごく分かりやすかったです。」
先生:「この三つを正しく使い分けられると、JSP全体がとても読みやすくなりますし、後々のメンテナンスも楽になりますよ。」
生徒:「サンプルコードも見て、どういう場面でどのタグを使えばいいのかイメージできました!」
先生:「よい理解ですね。次はJSTLやEL式にも進んで、より綺麗で保守性の高いJSPを書けるようになりましょう。」
生徒:「はい!JSPの基本が分かったので、もっと実践的なものに挑戦してみたいです。」
先生:「その意欲が大切です。JakartaEEの世界は広いので、一歩ずつ確実に進んでいきましょう。」