
サーブレット&JSPの基本|JSPの基本としくみ
HTMLを書きながらJavaも使える。JSPの基本としくみをやさしく理解して、Webページ作成をもっと楽にしよう
サーブレットの学習を進めると、HTMLを出力するたびに out.println を何度も書く場面が出てきます。最初は仕組みを理解するためにとても大切ですが、画面が少し複雑になるだけでも、ソースコードが長くなりやすいのが気になるところです。
そこで登場するのが JSP です。JSP は、サーブレットと同じくサーバサイドで動く技術ですが、HTMLの中にJavaのコードを埋め込んで書けるため、画面を作る処理をずっと自然な形で記述できます。見た目に関するHTMLと、動きに関するJavaを1つのファイルの中で扱えるので、サーブレットだけで画面を作るよりも書きやすく感じられるはずです。
この記事では、JSPとは何か、どのようなしくみで動くのか、そしてJSPファイルを書くとどのようなHTMLが出力されるのかを順番に見ていきます。サーブレットの学習と同じように、JSPも実際に作って実行しながら覚えていくのがいちばん分かりやすいです。まずは基本の考え方からしっかり押さえていきましょう。
JSPとは
JSPは Jakarta Server Pages の略で、サーブレットと同じくサーバサイドプログラムの技術です。ブラウザからのリクエストを受けてサーバ側で処理を行い、その結果をHTMLとして返します。
大きな特徴は、サーブレットクラスのようにJavaコードだけで画面を作るのではなく、JSPファイルを使って画面を作るところです。JSPファイルには、HTMLをそのまま書けます。そして必要な部分だけJavaのコードを埋め込めます。
サーブレットとJSPの違い
| 項目 | サーブレット | JSP |
|---|---|---|
| 主に使うファイル | Javaクラス | JSPファイル |
| HTMLの書き方 | out.println で1行ずつ出力 | HTMLをそのまま書ける |
| Javaコードの書き方 | クラスの中にJavaとして書く | HTMLの中にJavaを埋め込む |
| 画面作成のしやすさ | 画面が増えるとやや大変 | 画面を作りやすい |
| 実行の本質 | サーバサイドで実行 | サーバサイドで実行 |
JSPは見た目こそサーブレットとは少し違いますが、Webアプリケーションを作るためのサーバサイド技術である点は同じです。
サーブレットでは、たとえば次のようにHTMLを何行も out.println で出力していました。
- titleタグを出力する
- bodyタグを出力する
- 文章を出力する
- 閉じタグを出力する
これに対してJSPでは、HTMLの見た目をそのまま書きつつ、必要なところだけJavaの値を差し込めます。この書きやすさが、JSPの大きな魅力です。
図1:サーブレットとJSPの役割の違い

この図から分かること
サーブレットもJSPも、最終的にはブラウザへWebページを表示するための技術です。ただし、画面を作るときの書き方に違いがあります。
サーブレットではJavaのコードが中心になり、HTMLを文字列として1行ずつ出力していきます。JSPではHTMLをそのまま書けるため、画面の構造を見ながら作りやすくなります。
見た目を作る作業が多い場面では、JSPのほうが自然に書けることが多いです。そのため、サーブレットで処理を担当し、JSPで画面表示を担当する構成がよく使われます。
JSPのしくみ
JSPファイルは、そのまま直接実行されているわけではありません。実は、ブラウザからJSPファイルがリクエストされると、TomcatなどのアプリケーションサーバがそのJSPファイルをサーブレットクラスへ変換します。さらに、そのサーブレットクラスをコンパイルし、インスタンスを生成して実行します。
つまり、JSPは見た目としてはHTMLに近い書き方ができますが、内部ではサーブレットとして動いています。
JSPが実行される流れ
| 順番 | 内容 |
|---|---|
| 1 | 開発者がJSPファイルを作成する |
| 2 | ブラウザがJSPファイルをリクエストする |
| 3 | アプリケーションサーバがJSPファイルをサーブレットクラスへ変換する |
| 4 | 変換されたサーブレットクラスをコンパイルする |
| 5 | サーブレットのインスタンスを生成して実行する |
| 6 | 実行結果のHTMLをブラウザへ返す |
この流れを見ると、JSPは書き方こそ便利ですが、最終的にはサーブレットとして動くことが分かります。だからこそ、サーブレットでできることは、基本的にJSPでも行えます。
JSPファイルはサーブレットクラスに変換される
JSPのいちばん大事なポイントの1つは、JSPファイルがサーブレットクラスに変換されることです。
この仕組みがあるため、JSPはHTMLのように書きやすいのに、サーバ側の処理も実行できます。たとえば、変数を使う、Javaの値を画面に表示する、といったことが可能です。
逆に考えると、JSPは見た目上はHTMLファイルに近くても、中身は単なる静的なHTMLではありません。リクエストされるたびに、サーバ側で動作するプログラムとして扱われます。
JSPの特徴
| 特徴 | 内容 |
|---|---|
| リクエストして実行する | ブラウザからアクセスするとサーバ側で処理される |
| HTMLの中にJavaを書ける | 必要なところだけJavaを埋め込める |
| HTMLを出力しやすい | サーブレットより画面を作りやすい |
| サーブレットに変換される | 内部的にはサーブレットとして動く |
JSPを学ぶときは、HTMLを書きやすいサーバサイド技術、と考えるとつかみやすいです。
図2:JSPが実行されるまでの流れ

この図から分かること
JSPファイルは、ブラウザからアクセスされたときにそのまま実行されるのではなく、いったんサーブレットクラスへ変換されます。そして、そのサーブレットクラスがコンパイルされて実行されます。
この流れのおかげで、JSPはHTMLのように書きやすい見た目を持ちながら、サーバサイドプログラムとして動作できます。内部ではサーブレットとして処理されるため、動きの本質はサーブレットと共通しています。
JSPは単なる表示専用ファイルではなく、サーバ側で処理されるWebアプリケーションの一部であることがよく分かります。
JSPファイルの書き方
JSPファイルの中では、HTMLとJavaコードを組み合わせて書きます。HTMLは通常どおり記述し、Javaコードは専用の記法で埋め込みます。
ここでは、利用者の名前と学習コース名を表示するJSPの例を見てみましょう。
JSPファイルの例
<%
String userName = "青山 直人";
String course = "サーブレット&JSPの基本";
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSPのサンプル</title>
</head>
<body>
私の名前は<%= userName %>です。現在の学習コースは<%= course %>です。
</body>
</html>このファイルでは、最初の <% %> の中にJavaコードを書いています。ここでは userName と course という変数を用意しています。
そのあと、HTMLの本文の中で <%= %> を使い、変数の値を画面へ出力しています。
JSPでよく使う記法
| 記法 | 役割 |
|---|---|
| <% Javaコード %> | Javaの処理を書く |
| <%= 値や式 %> | 値や式の結果を画面へ出力する |
JSPファイルを見ると、HTMLがそのまま書かれているので、どのような画面になるのかをイメージしやすいです。これが、サーブレットの out.println をたくさん書く方法と比べたときの大きな違いです。
HTMLの中にJavaのコードを埋め込む
JSPの特徴は、HTMLの中にJavaのコードを埋め込めることです。
たとえば、bodyタグの中の文章の一部だけをJavaの変数で差し替えたい場合、HTML全体をJava文字列として出力する必要はありません。HTMLはそのまま書き、必要な部分にだけ <%= %> を使えばよいです。
この考え方によって、HTMLの構造と表示内容がとても見やすくなります。
JSPで書いた内容の見方
| 部分 | 役割 |
|---|---|
| Javaコード部分 | 値を準備する |
| HTML部分 | ページの構造を作る |
| <%= %> の部分 | 準備した値をHTMLの中へ差し込む |
サーブレットでは、見出し、本文、タグの開始と終了をすべて out.println で書いていました。それに対してJSPでは、見た目の大部分はHTMLとしてそのまま書けるため、ページを作る負担がかなり小さくなります。
実行するとどのようなHTMLが出力されるか
先ほどの profile.jsp を実行すると、ブラウザへ返されるHTMLは次のようになります。
実行して出力されるHTMLの例
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSPのサンプル</title>
</head>
<body>
私の名前は青山 直人です。現在の学習コースはサーブレット&JSPの基本です。
</body>
</html>この結果を見ると、HTMLの部分はそのまま出力され、userName と course の部分には具体的な値が埋め込まれていることが分かります。
つまり、JSPではJavaコードで値を用意し、それをHTMLへ差し込み、最終的には通常のHTMLとしてブラウザへ返しているのです。
図3:JSPファイルからHTMLが出力されるイメージ

この図から分かること
JSPファイルでは、JavaコードとHTMLが1つのファイルにまとめて書かれています。Javaコードで用意した変数の値を、HTMLの中に埋め込んで出力できます。
JSPが実行されると、Tomcatがその内容を処理し、最終的には通常のHTMLとしてブラウザへ返します。ブラウザはJSPそのものを受け取るのではなく、JSPの実行結果として生成されたHTMLを受け取っています。
このしくみのおかげで、開発者はHTMLを見ながら画面を作りやすくなり、しかもJavaの値も柔軟に表示できます。
JSPを使うとHTML出力が楽になる理由
JSPを使うと、サーブレットクラスよりもHTML出力がずっと楽になります。
その理由は、HTMLを文字列として1つひとつ出力しなくてよいからです。たとえば、サーブレットでHTMLを出力すると、次のような作業が必要でした。
- htmlタグを out.println で出力する
- headタグを出力する
- metaタグを出力する
- bodyタグを出力する
- 文章を出力する
- 終了タグを出力する
JSPでは、これらを自然なHTMLの形でそのまま書けます。Javaで扱いたい部分だけを埋め込めばよいので、画面の構造がとても分かりやすくなります。
サーブレットとJSPの画面作成のしやすさ
| 観点 | サーブレット | JSP |
|---|---|---|
| HTMLの見やすさ | やや低い | 高い |
| 画面の修正しやすさ | やや大変 | 修正しやすい |
| Javaとの組み合わせ | しやすい | しやすい |
| 表示画面の作成 | 手間がかかりやすい | 比較的自然に書ける |
特に、表示する画面の見た目を整えたいときには、JSPのありがたさがよく分かります。
サーブレットでできることはJSPでも行える
JSPファイルは内部的にサーブレットクラスへ変換されます。したがって、サーブレットクラスでできることは、基本的にJSPでも行えます。
たとえば、Javaの変数を使う、値を画面へ表示する、といったことはもちろん可能です。JSPはまったく別の仕組みではなく、サーブレットの動きをより書きやすい形にしたものだと考えると理解しやすいです。
ただし、JSPの役割は画面表示に向いています。Javaの複雑な処理を大量に書くよりも、表示のために必要な範囲で使うほうが、コードを読みやすく保ちやすいです。
Eclipseで変換されたサーブレットクラスの場所
Eclipseを使っている場合、JSPファイルから作成されたサーブレットクラスは、ワークスペース内の特定の場所に作成されます。
代表的な場所は次のようになります。
.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\study\org\apache\jsp
たとえば、hello.jsp を作成して実行すると、この場所に次のようなファイルが作成されます。
| ファイル | 内容 |
|---|---|
| hello_jsp.java | JSPから変換されたサーブレットクラスのソースファイル |
| hello_jsp.class | そのクラスをコンパイルしたファイル |
この場所を知っておくと、JSPが内部でどのように扱われているかをイメージしやすくなります。JSPは見た目こそHTML寄りですが、実際にはサーブレットクラスへ変換されていることがここからも分かります。
JSPの修正が反映されないとき
まれに、JSPファイルを修正したのに実行結果へ反映されないことがあります。
そのような場合は、Eclipseワークスペース内の、JSPから生成されたサーブレットクラスが置かれているディレクトリの中身を削除すると、改善することがあります。これは、古い変換結果やコンパイル結果が残っていて、正常に更新されていない場合があるためです。
反映されないときの確認ポイント
| 確認項目 | 内容 |
|---|---|
| JSPファイルを保存したか | 変更が保存されているか確認する |
| ブラウザを更新したか | 最新表示を確認する |
| Tomcatの状態 | サーバが正常に動いているか確認する |
| 生成先ディレクトリ | 古いファイルが残っていないか確認する |
この対処は毎回必要になるわけではありませんが、JSPの変更がどうしても反映されないときの手段として覚えておくと役立ちます。
JSPの基本として押さえておきたいこと
最後に、JSPの基本として押さえておきたいポイントを整理しておきます。
JSPの基本ポイント
| ポイント | 内容 |
|---|---|
| JSPはサーバサイド技術 | ブラウザではなくサーバ側で実行される |
| JSPファイルを使う | サーブレットクラスの代わりにJSPファイルで画面を作る |
| HTMLの中にJavaを書ける | 必要な部分だけJavaを埋め込める |
| JSPはサーブレットへ変換される | 内部的にはサーブレットとして動く |
| HTML出力がしやすい | サーブレットより画面作成が楽になる |
JSPは、サーブレットの知識を土台にして学ぶと理解しやすい技術です。サーブレットでHTMLを1行ずつ出力していた経験があると、JSPの便利さがより実感しやすくなります。
これからJSPを学ぶときは、HTMLを自然に書きながら、必要なところへJavaを埋め込める仕組みとして捉えると、全体像がつかみやすくなります。
