JSPで文字を出力する方法まとめ!HTMLとの違いと<%= %>の使い方
生徒
「先生、JSPってどうやって文字を出力するんですか?HTMLとは違うんですよね?」
先生
「その通りです。JSPではJavaコードを埋め込んで文字を出力する方法があるので、HTMLと少し使い方が異なります。」
生徒
「なるほど…。たとえば<%= %>っていうのを見たことがありますが、あれって何ですか?」
先生
「良いところに気づきましたね。それでは、JSPで文字を出力する基本と<%= %>の使い方を詳しく見ていきましょう。」
1. JSPで文字を出力する基本
JSP(JavaServer Pages)は、サーバーサイドで動作するJavaベースのテンプレートエンジンです。JSPを使うと、HTMLの中にJavaコードを埋め込んで、動的なWebページを作成できます。文字を出力する際は、通常のHTMLタグで書く方法と、JSP独自の構文で出力する方法の2種類があります。
まず、HTMLの中で直接テキストを書く方法は、次のように記述します。
<!DOCTYPE html>
<html>
<head>
<title>JSP出力例</title>
</head>
<body>
<p>こんにちは、世界!</p>
</body>
</html>
このように記述すれば、ブラウザ上には「こんにちは、世界!」と表示されます。これは通常のHTMLの扱いと変わりません。
2. JSPの<%= %>でJavaの値を出力する方法
JSPでJavaの変数や計算結果などを出力したい場合、<%= %>という構文を使います。これは「式(Expression)」と呼ばれ、out.print()と同じ動きをします。
例えば、次のようなJSPコードを書いた場合:
<!DOCTYPE html>
<html>
<head>
<title>JSP出力</title>
</head>
<body>
<%
String name = "太郎";
%>
<p>こんにちは、<%= name %>さん!</p>
</body>
</html>
このコードを実行すると、ブラウザには次のように表示されます。
こんにちは、太郎さん!
このように、Javaで定義した変数nameの値が、HTMLに組み込まれて表示されます。
3. <%= %>と<% %>の違いとは?
JSPではJavaコードを埋め込む方法がいくつかありますが、特に混乱しやすいのが<%= %>と<% %>の違いです。
<%= %>:Javaの「値」をその場で出力したいときに使う<% %>:Javaの「処理(if文・変数定義など)」を行うときに使う
たとえば、次のような例では:
<%
int num = 10;
int doubled = num * 2;
%>
<p>2倍の値は <%= doubled %> です。</p>
このように、処理部分は<% %>で書き、出力部分は<%= %>で書くという役割分担があります。
4. HTMLとの違い:JSPは動的、HTMLは静的
JSPとHTMLの最も大きな違いは、「動的に処理できるかどうか」です。HTMLはあくまで静的な表示しかできませんが、JSPはJavaのロジックを組み込むことで、ページの内容を動的に変えることが可能です。
たとえば、時間帯によって表示内容を変えるような処理も、JSPなら簡単にできます。
<%
int hour = java.time.LocalTime.now().getHour();
String greeting;
if (hour < 12) {
greeting = "おはようございます";
} else {
greeting = "こんにちは";
}
%>
<p><%= greeting %></p>
このように、JSPではJavaの条件分岐を使って、表示内容を動的に変えることができます。
5. JSPでHTMLエスケープに注意しよう
JSPでJavaの値を出力する際に注意すべき点のひとつが「HTMLエスケープ」です。たとえば、出力したい文字列に<や>が含まれていると、ブラウザがHTMLタグと誤認してしまう可能性があります。
ユーザーが入力したデータなどを表示する場合は、StringEscapeUtils.escapeHtml4()などでエスケープ処理をしてから出力するのが安全です。
<%@ page import="org.apache.commons.text.StringEscapeUtils" %>
<%
String userInput = "<script>alert('危険')</script>";
String safeOutput = StringEscapeUtils.escapeHtml4(userInput);
%>
<%= safeOutput %>
上記のように、HTMLタグがそのまま出力され、ブラウザで実行されるリスクを避けることができます。
6. out.print()との違いと使い分け
JSPでは<%= %>と同様の意味を持つout.print()メソッドも使えます。たとえば以下のように書くと、同じ出力が得られます。
<%
String name = "花子";
out.print("こんにちは、" + name + "さん!");
%>
ただし、見た目が煩雑になるため、基本的には<%= %>を使ったほうが読みやすく、初心者にも扱いやすいです。
7. JSPの出力でよくあるミスと対策
JSPで初心者がつまずきやすいポイントとして、以下のようなものがあります。
- セミコロンのつけ忘れ
- HTMLとJavaコードの混在によるタグのミス
- 変数のスコープを理解せずにエラーになる
- ブラウザに反映されないキャッシュの問題
これらを防ぐには、まずコードを丁寧に書くことと、Tomcatなどの再起動やキャッシュのクリアを忘れずに行うことが大切です。
まとめ
JSPで文字を出力する仕組みをしっかり整理しよう
JSPで文字を出力する方法は、静的なHTMLの出力とは異なり、Javaのロジックをそのままページに組み込める点に大きな特徴があります。特に<%= %>構文を使った動的な値の出力や、<% %>構文を使った処理の記述は、Webアプリケーションの柔軟なページ生成に欠かせない基本スキルです。今回の記事では、JSPでの文字出力の基本から、動的な表示を実現する方法、HTMLとの大きな違い、さらにエスケープやよくあるミスなど実践的なポイントまで幅広く触れました。
HTMLはあくまで静的な内容を描画するために使われますが、JSPではサーバーサイドでJavaコードが動作し、画面表示を自在に変えることができます。条件分岐や計算、フォームの入力値の反映など、動的にコンテンツを変更したい場面ではJSPの特性が大きな力を発揮します。また、out.print()との違いや、HTMLエスケープの重要性もあわせて理解しておくことで、安全で保守しやすい開発が可能になります。
今回の内容を整理すると、JSPで文字を出力する方法は大きく分けて「HTMLとしてそのまま書く」「Javaの値を<%= %>で出力する」「スクリプトレットで処理を書いて動的に表示を変える」という三つに分類できます。さらに、動的表示の便利さと引き換えに気をつけるべきポイントとして、エスケープ処理やタグの混在によるミスなども理解しておく必要があります。JSPの基本構文をきちんと押さえることで、複雑なWebアプリケーションの画面でも柔軟な表現が可能になり、開発効率も大きく向上します。
最後に、記事の内容をより具体的に振り返るために、JSPで文字を出力する基本的なサンプルコードを再整理して紹介します。HTMLのような書き方とJSP独自の書き方の違いが理解できるはずです。動的コンテンツの生成という観点からも、これらのコードは日常的に利用される大切なエッセンスとなります。
JSPの出力方法を確認できるサンプルコード
まずはHTML形式でそのまま文字を出力する例です。
<!DOCTYPE html>
<html>
<head>
<title>静的表示の例</title>
</head>
<body>
<p>これはHTMLとして出力される文字です。</p>
</body>
</html>
次に、JSPの<%= %>でJavaの値を表示する例です。
<%
String animal = "猫";
int age = 3;
%>
<p>飼っている動物は <%= animal %> で、<%= age %> 歳です。</p>
処理ロジックを含めることで、動的に文章を切り替えることもできます。
<%
int hour = java.time.LocalTime.now().getHour();
String greet;
if (hour < 12) {
greet = "おはようございます";
} else if (hour < 18) {
greet = "こんにちは";
} else {
greet = "こんばんは";
}
%>
<p>現在のあいさつ:<%= greet %></p>
このように、JSPではJavaの変数・計算・条件分岐を柔軟に埋め込むことで、HTMLだけでは実現できない豊かな表現が可能になります。フォーム入力の反映、画面遷移、データの加工など、動的Webサイトに必要な多くの処理を内部で行えるため、サーバーサイドの強みを活かした開発ができます。
ただし、文字出力の際に忘れてはならない重要ポイントがエスケープ処理です。ユーザー入力のような不確定な文字列をそのまま出力すると、意図しないタグが実行されるリスクが発生します。以下のようなエスケープ処理を取り入れておくことでセキュリティを確保できます。
<%@ page import="org.apache.commons.text.StringEscapeUtils" %>
<%
String raw = "<script>alert('危険')</script>";
String safe = StringEscapeUtils.escapeHtml4(raw);
%>
<%= safe %>
このような基礎をひとつずつ理解することが、JSPの実践的な活用につながります。動的な表示の仕組み、構文の使い分け、エスケープ処理など複数の観点を知っておくことで、安定したWebページ開発が可能になります。今回学んだ内容を土台に、より複雑なテンプレート構築やServletとの連携にも自然と応用できるようになるでしょう。
生徒:「先生、JSPで文字を出力する方法がHTMLだけのときよりたくさんあって驚きました!」
先生:「そうだね。JSPではJavaの値を扱えるから、画面を動的に作るにはとても便利なんだよ。」
生徒:「特に<%= %>と<% %>の使い分けが大事だと感じました。役割が違うんですね。」
先生:「その通り。処理を書くのか、値を出すのかで適切な構文を選ぶ必要があるんだ。」
生徒:「HTMLでは動かないコードがJSPだと動く理由も理解できました。サーバー側で処理しているんですね。」
先生:「よく理解できているね。それにエスケープ処理を忘れないこともとても大事だよ。」
生徒:「はい!今回のまとめのおかげでJSPのしくみがかなり整理できました!」