JSPのスクリプトレットとは?基本の書き方と使いどころを解説【初心者向け入門ガイド】
生徒
「JSPでJavaのコードを書くにはどうすればいいんですか?」
先生
「JSPではスクリプトレットという仕組みを使って、JavaコードをHTMLの中に直接書くことができます。」
生徒
「スクリプトレットって具体的にどういう風に書くんですか?そして何に使うんですか?」
先生
「それでは、JSPのスクリプトレットの基本的な書き方や使いどころを分かりやすく説明しましょう。」
1. スクリプトレットとは何か?
スクリプトレットとは、JSP(JavaServer Pages)でJavaの処理を直接HTML内に書くための仕組みです。HTMLコードと一緒にJavaの処理を埋め込むことができるため、Webページの中で条件分岐や繰り返し処理を行いたい場合に非常に便利です。
JSPのスクリプトレット記法は以下のように記述します。
<%
// Javaコードを書く
%>
例えば、変数を定義したり、if文やfor文を書くことができます。
2. スクリプトレットの基本的な書き方
実際にJSPファイルにJavaコードを書く場合の基本形は以下の通りです。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>スクリプトレットの例</title>
</head>
<body>
<h3>今日の日付を表示します</h3>
<%
java.util.Date now = new java.util.Date();
%>
<p>現在の日時:<%= now %></p>
</body>
</html>
<% ... %>の中にはJavaコードを書き、<%= ... %>を使うと変数の値をHTMLに出力できます。
3. よく使うスクリプトレットの使い方
JSPスクリプトレットの使いどころとしては、以下のような場面があります。
- 条件分岐:ある条件に応じて表示内容を変えたいとき
- 繰り返し処理:リストや配列をループで表示したいとき
- 日付や計算処理:簡単なロジックをJSP内で実装したいとき
以下は条件分岐のスクリプトレットの例です。
<%
int score = 75;
if (score >= 60) {
%>
<p>合格です!</p>
<%
} else {
%>
<p>不合格です。</p>
<%
}
%>
このように、HTMLとJavaのコードを交互に書くことで、柔軟なWebページが作れます。
4. スクリプトレットの注意点と落とし穴
JSPでスクリプトレットを使う際にはいくつかの注意点があります。
- 複雑になりやすい:HTMLとJavaが混在するため、可読性が悪くなる
- 再利用性が低い:ロジックがページごとに分かれてしまう
- EL式やJSTLと混ぜるとバグの原因になる
- 保守が難しい:チーム開発では避けられる傾向がある
そのため、スクリプトレットの使い方にはバランスが必要です。
5. スクリプトレットの代替:EL式とJSTLの活用
最近では、スクリプトレットを使わずにJSPを記述する方法として、EL式やJSTLが主流になっています。理由はコードの可読性や保守性を高めるためです。
- EL式(Expression Language):
${変数}の形で値を表示 - JSTL(JSP Standard Tag Library):
<c:if>や<c:forEach>などのタグで制御
たとえば、以下のようにJSTLを使えば、スクリプトレットなしでも繰り返し処理ができます。
<c:forEach var="item" items="${itemList}">
<p>${item}</p>
</c:forEach>
このように、JSPのスクリプトレットからJSTLへの移行も検討しておくと、より現代的な開発ができます。
6. どんな場面でスクリプトレットを使うべきか?
スクリプトレットを使うべきシーンは限られてきていますが、以下のようなケースではまだ有効です。
- 学習目的:Javaの流れや構造を理解するため
- 少量の簡易的な処理:画面表示の直前に条件分岐をしたいとき
- Servlet未使用の小規模プロジェクト
ただし、将来的にはJSP+ServletやSpring MVCなどの構成に移行することを前提に学習を進めるのが賢明です。
7. スクリプトレットを含むJSPの練習課題例
JSPスクリプトレットを練習するための課題を通して、実践的なスキルを身につけましょう。
- ① 変数を使って現在時刻を表示する
- ② if文でメッセージを切り替える
- ③ for文で1〜10までの数値を出力する
以下はfor文の出力例です。
<%
for (int i = 1; i <= 10; i++) {
%>
<p><%= i %></p>
<%
}
%>
このような小さな課題から、JSPスクリプトレットの基礎を身につけていくと理解が深まります。
まとめ
JSPスクリプトレットの基礎を丁寧に振り返る
今回の記事では、JSPの「スクリプトレット」という仕組みを中心に、基本的な書き方や使いどころ、気をつけたい点、そしてより現代的な代替手段まで幅広く確認してきました。はじめてJSPに触れると、HTMLの中にJavaのコードがそのまま書けることに驚くかもしれません。しかし、実際に手を動かしてみると、条件分岐や繰り返し、日付の取得など、普段Javaで行っている処理がそのままWebページの表示に結びついていく感覚を掴むことができます。
スクリプトレットは<% ... %>という非常にシンプルな記法で、HTMLの表示とJavaのロジックを直感的に組み合わせられるメリットがあります。一方で、コードが複雑になりやすいという弱点もあり、ページ全体がごちゃごちゃしてしまう経験をした人も少なくないでしょう。そのため、記事で触れたように、スクリプトレットは「どうしても必要な場面」や「学習目的」で使うのが良いバランスになります。
また、最近のJSPではEL式やJSTLを使った書き方が主流になっており、HTMLの可読性や保守性を損なわずに、動的な値の表示や繰り返し処理を実装できるようになっています。スクリプトレットを学ぶことで、なぜEL式やJSTLが便利なのかが自然と理解でき、今後より高度な開発環境に進む際の土台にもなるでしょう。
スクリプトレットは単なる古い技術ではなく、JSPという仕組みの根本を理解するための重要な要素でもあります。例えば、ページがどのようにサーブレットへ変換されるのか、処理の順序がどう関わっているのかなど、Webアプリケーションの裏側を知るきっかけになる部分でもあります。そういった意味でも、今回の内容はJSPの初歩として非常に大切なステップになります。
以下では、記事全体の流れを踏まえて、スクリプトレットの基本がしっかり身につくようにサンプルコードをまとめています。実際に書いて動かしてみることで、自分の理解がより確かなものになるはずです。
スクリプトレットの基本が身につくサンプルコード
● 日付を取得して表示する基本例
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>スクリプトレット基本</title>
</head>
<body>
<h3>現在の日付を表示します</h3>
<%
java.util.Date now = new java.util.Date();
%>
<p>今日の日時:<%= now %></p>
</body>
</html>
● 条件分岐でメッセージを変える例
<%
int score = 82;
if (score >= 60) {
%>
<p>合格おめでとうございます!</p>
<%
} else {
%>
<p>惜しい!次はきっと大丈夫です。</p>
<%
}
%>
● 繰り返し処理で1〜10を出力する例
<%
for (int i = 1; i <= 10; i++) {
%>
<p>番号:<%= i %></p>
<%
}
%>
これらの例を見ると分かるように、スクリプトレットはHTMLとJavaを交互に使いながら記述していきます。慣れるまでは「どこからどこまでがJavaなのか」を見失いがちですが、ひとつずつ丁寧に書いていくことが上達の近道になります。また、処理が増えるほど可読性が下がるため、ある程度の規模の開発ではEL式やJSTLへ移行する判断が必要になります。とはいえ、基礎を学ぶという点において、スクリプトレットは非常にわかりやすく、初心者にとって「JSPとは何か」を理解するには最適な技術です。
最後に、記事内容をより自然に理解できるよう、生徒と先生の会話形式で振り返りをまとめました。実際に学んだことを整理しながら読むことで、スクリプトレットの基礎がさらに身近に感じられるはずです。
生徒:「先生、スクリプトレットって最初は難しそうに思ったけど、実際に書いてみると意外と理解しやすいですね。」
先生:「そうでしょう。HTMLのように見えてJavaが動くところがJSPの面白い部分なんですよ。」
生徒:「if文やfor文も普通のJavaと同じように書けるのが便利でした。でも、長くなると読みにくいっていうのも感じました。」
先生:「そこはまさに注意点ですね。規模が大きくなるとEL式やJSTLを使う理由がよくわかってくると思います。」
生徒:「スクリプトレットが古いと言われる理由も理解できました。でも基礎を学ぶにはすごく役立ちますね。」
先生:「その通り。JSPがどう動くのかを知るにはぴったりなので、今のうちにしっかり身につけておくと今後に生きますよ。」
生徒:「ありがとうございます!まずは練習課題を全部書いて理解を深めてみます!」