JSPの基本構文まとめ!スクリプトレット・ディレクティブ・式の違いとは?
生徒
「JSPって、タグの中にJavaコードを書けるって聞いたんですけど、本当ですか?」
先生
「はい、その通りです。JSPには、Javaのコードを書き込める『基本構文』というものがいくつかあります。」
生徒
「どんな種類があるんですか?違いもよく分かってなくて…」
先生
「それでは、JSPの代表的な基本構文『スクリプトレット』『ディレクティブ』『式』の違いをやさしく解説していきましょう。」
1. JSPとは?HTMLとJavaが混在するテンプレート
JSP(Java Server Pages)は、HTMLの中にJavaのコードを直接書ける仕組みです。Webアプリケーションを作成する際に、動的にHTMLを生成したい場面でよく使われます。
HTMLとJavaを組み合わせて、フォームの入力内容を処理したり、データベースと連携してページを表示したりすることができます。
JSPのファイルは、拡張子が.jspで、内部的にはJavaサーブレットに変換されてから実行されます。
2. JSPの基本構文は3つ!役割の違いを理解しよう
JSPで使われる基本的な構文は、以下の3つです:
- スクリプトレット(
<% ... %>):Javaの処理を書ける - ディレクティブ(
<%@ ... %>):JSPファイルの設定を書く - 式(
<%= ... %>):値をHTMLに出力する
それぞれの違いや使い方を、順番に見ていきましょう。
3. スクリプトレット(<% ... %>)とは?Javaの処理を書く場所
スクリプトレットは、JSPの中にJavaの処理をそのまま書ける構文です。if文やfor文、変数定義など、Javaの文法をそのまま使います。
例えば、カウント処理を書く場合は次のようになります:
<%
int count = 5;
for (int i = 1; i <= count; i++) {
%>
<p>カウント:<%= i %></p>
<%
}
%>
このように、<%と%>の間にJavaコードを書き、繰り返し処理などを行えます。
4. ディレクティブ(<%@ ... %>)とは?JSPファイルのルールを設定
ディレクティブは、JSPファイルの設定や読み込む外部ファイルの指定などを行う構文です。JSPの冒頭で使うことが多く、ページ全体に影響を与える重要な役割があります。
代表的なディレクティブには以下のようなものがあります:
- pageディレクティブ:エンコーディングやインポート設定など
- includeディレクティブ:他のJSPファイルを読み込む
例:
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page import="java.util.Date" %>
<%@ include file="header.jsp" %>
文字コードの設定や、外部の共通ヘッダーの読み込みに活用されます。
5. 式(<%= ... %>)とは?値を出力するための構文
式は、Javaの値をHTMLに埋め込んで出力するための構文です。変数やメソッドの戻り値などを直接表示できます。
たとえば、現在時刻を表示するには次のように書きます:
<%@ page import="java.util.Date" %>
<html>
<body>
<p>現在時刻:<%= new Date() %></p>
</body>
</html>
<%= ... %>の中にJavaの式を書くことで、値がその場で出力されます。
6. スクリプトレットよりもJSPタグライブラリの活用がおすすめ
近年のJSP開発では、スクリプトレットの使用は非推奨とされています。その理由は、HTMLとJavaのロジックが混在し、コードの可読性や保守性が下がるからです。
代わりに、JSTL(JSP Standard Tag Library)やEL式(Expression Language)と呼ばれるタグベースの仕組みを使うことで、より見やすく安全なJSPが書けます。
JSTLを使えば、スクリプトレットのような処理をHTMLタグで記述できます:
<c:forEach var="i" begin="1" end="5">
<p>カウント:${i}</p>
</c:forEach>
今後は、JSTLやEL式などの学習も進めていくのがおすすめです。
7. JSPの構文を使う上での注意点
JSPを使うときは、以下のポイントにも注意しましょう:
- Javaのコードはなるべくスクリプトレットではなく、JSPタグに置き換える
- ディレクティブで正しくエンコーディングを指定する(
UTF-8など) - HTMLとJavaが混ざるため、見た目がわかりにくくなりやすい
- 開発環境によってはJSPのエラーが見つけづらいことがある
こうした点をふまえ、JSPの構文を理解した上で、適切に使い分けることが重要です。
まとめ
JSPの基本構文である「スクリプトレット」「ディレクティブ」「式」は、それぞれ役割が明確に異なり、どの構文もWebページを動的に生成するうえで欠かせない仕組みとなっています。とくに初心者のうちは、これらの違いが曖昧なまま実装を進めてしまい、HTMLとJavaの境界が見えにくくなって混乱しやすい場面がよくあります。そのため、まずは構文の特徴や使いどころをしっかり整理し、JSPがどのように処理され、最終的にどのようなHTMLが生成されるのかを理解しておくことが大切です。
スクリプトレットは<% ... %>内にJavaコードを直接書けるという柔軟さがありますが、ロジックと表示が混在してしまうため、規模が大きくなるほど読みづらさが増します。また、値を出力する式(<%= ... %>)は簡潔な記述ができる反面、複雑な処理を埋め込むと可読性が大きく低下するというデメリットもあります。そのため、途中から修正する際に意図が掴みにくくなり、チーム開発では特に注意が必要です。
これに対してディレクティブ(<%@ ... %>)は、ページ全体の設定を記述する仕組みであり、importの設定やエンコーディング指定、外部ファイルの読み込みなど、JSPページの根幹を支える役割を担っています。JSPを扱ううえでまず最初に見るべき部分であり、記述ミスがあるとページ全体の挙動に影響を及ぼすため、正しい書き方を身につけることが重要です。
また、近年ではJSPのスクリプトレットは非推奨とされ、代わりにJSTLやEL式といった構文が推奨されています。これらはJavaコードを直接書かずにロジックを扱うため、HTMLとロジックの境界がより明確になり、テンプレートとしての扱いやすさが大幅に向上します。特に<c:forEach>や<c:if>のようなJSTLタグは、スクリプトレットを使わなくても柔軟な処理を記述できるため、現場でもよく利用されています。
さらに、JSPを扱う際には、必ず「最終的に生成されるHTMLの形」を意識することが大切です。Javaの処理がどのタイミングで評価されるのか、ディレクティブがどの範囲に影響するのか、式がどの瞬間にHTMLへ埋め込まれるのかなど、仕組みを理解することで、エラーの発見やトラブルシューティングが格段に容易になります。また、複数の構文を組み合わせた書き方では、ページの見た目と処理内容が複雑に絡み合うため、コードの整理や役割分担を常に意識しておくと良いでしょう。
ここでは、JSPの基本構文を復習できる簡単なサンプルを紹介します。スクリプトレット・式・ディレクティブを組み合わせて動的なページを生成する際の参考にしてください。
JSP基本構文の総まとめサンプル
<%@ page contentType="text/html; charset=UTF-8" import="java.util.Date" %>
<%
// Javaの処理部分(スクリプトレット)
String message = "ようこそ!";
Date now = new Date();
%>
<html>
<head>
<title>JSP基本構文のまとめページ</title>
</head>
<body>
<h2 id="mokuji_9">メッセージの表示</h2><!-- ここに画像を追加 ★NoImageはあとで書き換え★ -->
<div class="position-relative text-center image-overlay mb-3">
<img src="/img/view/java-exception-introduce-09.jpg?1" class="img-fluid" alt="メッセージの表示" onerror="this.onerror=null; this.src='/img/view/java-exception-introduce.jpg';">
<div class="overlay"></div>
<div class="position-absolute top-50 start-50 translate-middle text-white fw-bold img-overlay-text2">メッセージの表示</div>
</div>
<p>メッセージ:<%= message %></p>
<h2 id="mokuji_10">現在時刻の表示</h2><!-- ここに画像を追加 ★NoImageはあとで書き換え★ -->
<div class="position-relative text-center image-overlay mb-3">
<img src="/img/view/java-exception-introduce-10.jpg?1" class="img-fluid" alt="現在時刻の表示" onerror="this.onerror=null; this.src='/img/view/java-exception-introduce.jpg';">
<div class="overlay"></div>
<div class="position-absolute top-50 start-50 translate-middle text-white fw-bold img-overlay-text2">現在時刻の表示</div>
</div>
<p>現在時刻:<%= now %></p>
</body>
</html>
このように、JSPの基本構文を組み合わせることで動的なページを簡単に構築できますが、可読性やメンテナンス性を損なわないよう注意する必要があります。コードの役割と構造を理解し、どの構文をどの場面で使うべきかを見極めることが、長く使える高品質なJSPページを作る第一歩と言えるでしょう。
生徒
「JSPでJavaをそのまま書けるのは便利だけど、使いすぎると大変になるんですね…!」
先生
「そうなんです。特にスクリプトレットは便利ですが、増えると読みにくくなります。タグライブラリを使うほうが後々楽になりますよ。」
生徒
「式で値を直接出力できるのも面白かったです!ただ、テンプレートっぽく見せたいときは控えめにするほうがよさそうですね。」
先生
「その通り。最終的にHTMLがどんな形になるかを常に意識すると、JSPの構造がとても理解しやすくなりますよ。」
生徒
「今日のまとめで、スクリプトレット・ディレクティブ・式の違いがようやくはっきり分かりました!」
先生
「よく理解できていますね。これがわかれば、今後のJSP学習もスムーズになりますよ。」