JSP(Java Server Pages)は HTMLにJavaコードを差し込み、動的ページを生成する仕組み です。
まず最初にお伝えしたいのは、JSPは決して難しいものではありません。むしろ、「ちょっと動きのあるWebページを、できるだけ簡単に作りたい!」という人のために生まれたものなのです。近年では他の技術に取って代わられた印象が否めないJSPですが、昔からある巨大なレガシーシステムなどでは現役で、システムの更改案件などではよく目にすることがあります。
このページでは「JSPってそもそも何?」という一番大事な部分から、初心者向けに順を追って1からわかりやすく専門用語を避けて解説します。
JSPとは何か?
JSP(Java Server Pages)は、Javaを使ってWebページを動的に生成するための技術で、通常のHTMLファイルにJavaのコードを埋め込むことで、アクセスするたびに内容が変化するページを作成することを可能にします。

そのため、JSPはJavaをベースとしていますが、HTMLの知識があれば、基本的な使い方は十分に理解することができます。
【前提1】静的なページと動的なページ
Webページには、大きく分けて2種類あります。
1つは「静的なページ」、もう1つは「動的なページ」です。
静的なページとは、内容があらかじめ決まっていて、アクセスするたびに同じ内容が表示されるページです。たとえば、自己紹介だけが書かれた会社のホームページや、お知らせ一覧だけが載っているページなどが該当します。
一方、動的なページは、アクセスした時点の情報や、閲覧しているユーザーの状態に応じて内容が変わります。たとえば、ショッピングサイトで商品が表示されたり、ログイン中のユーザー名が画面に表示されたりするページがそうです。
静的なページはHTMLだけで作成できますが、動的なページを作るには、プログラムによってページの内容を生成する仕組みが必要です。JSPは、そのような仕組みの一つです。

もちろんJSP以外にも同じようなことを実現することが可能で、現代ではほとんどJSP以外が主役です。なのですが、レガシーシステムでは今でも現役で動いていることが多いので「まあ知っておいて損はないかな」というのがJSPの位置づけです。
JSPとはどのような技術か
JSPは、JavaのコードをHTMLに埋め込むことで、Webサーバー上で動的にHTMLを生成する技術です。拡張子が .jsp であるファイルを使ってページを作成します。
JSPファイルは、Webサーバー(通常はTomcat)に配置され、ユーザーがアクセスすると、サーバー側でJavaのコードが実行されます。その結果として生成されたHTMLが、ブラウザに送信され、画面に表示されます。

つまり、JSPは「動的にHTMLを生成する仕組み」であり、「HTMLの中にJavaの処理を一部書き足せる形式のファイル」と言えます。
JSPの動作のしくみ
JSPファイルは、ユーザーがアクセスしたときに、サーバー側で一度「Javaのクラス(Servlet)」に変換されます。変換されたクラスはコンパイルされ、Javaプログラムとして実行されます。このとき、JSPファイルに書かれたHTMLの部分はそのままHTMLとして出力され、Javaのコード部分は処理されて結果が埋め込まれます。最終的に生成されたHTMLがブラウザに送信され、ユーザーに表示されます。
このしくみによって、JSPは1枚のファイルで「HTMLの見た目」と「動的な処理」を両立させることができます。
JSPの動き方の流れ
- ユーザーが
.jspファイルをリクエストする(例:hello.jsp) - Tomcat がその
.jspを読んで、中の Java を実行 - 結果として HTML を作り出し、ブラウザに返す
- ブラウザには、あたかも普通のHTMLのように見える
この一連の流れによって、「動きのあるページ」がリクエスト元に返却されることになります。
JSPを動かすための準備
JSPファイルは、通常のHTMLファイルと違い、単独では動作しません。JSPはサーバー側でJavaのコードを実行する仕組みのため、その処理を受け持つ「Webサーバー」や「Javaの開発環境」が必要です。

この章では、JSPを動かすために必要なソフトウェアや環境を、1つずつ順を追って準備していきます。
JSPの動作に必要なもの
JSPを動作させるには、次の3つが必要です。ここでは、それってそもそも何?みたいな説明+実際にあなたのPCにインストールする手順をメモ程度に記載しておきますので、この辺の知識がすでにあるよ!という方は読み飛ばしてください。
| 項目 | 説明 |
|---|---|
| JDK(Java Development Kit) | Javaのプログラムを実行するために必要なソフトウェアです。JSPはJavaで動作するため、必ず必要になります。 |
| Tomcat(トムキャット) | JSPファイルを処理し、Javaのコードを実行してHTMLに変換するWebサーバーです。 |
| エディタ(テキスト編集ソフト) | JSPファイルを作成するための道具です。Visual Studio Code(VS Code)やIntelliJ IDEAなどが便利です。 |
JDKのインストール
まず、Javaの開発環境であるJDKをインストールします。JDKがインストールされていないと、JSPも動作しません。
- Oracleの公式サイトまたはOpenJDKのサイトから、JDKをダウンロード。
- お使いのOSに合ったインストーラを選び、画面の指示に従ってインストール。
- インストール後、コマンドプロンプト(またはターミナル)を開き、↓のコマンドを入力。
java -version

バージョンが表示されれば、正常にインストールされています。
Tomcatのインストール
JSPファイルを処理するために、Tomcatをインストールします。TomcatはJavaで動作するWebサーバーで、JSPの実行に適した軽量なサーバーです。
- Apache Tomcat の公式サイトにアクセス。
- zip ファイル(Windows の場合)または tar.gz ファイル(Mac/Linux の場合)をダウンロード。
- ダウンロードしたファイルを任意の場所に展開(解凍)。
→C:\tomcatや~/tomcatなどが一般的ですが、どこでもOK。 binフォルダにあるstartup.bat(Windows)またはstartup.sh(Mac/Linux)を実行。- ブラウザを開き、次のURLにアクセスします:

Tomcatのトップページが表示されれば、インストールは成功です。
JSP用のフォルダを作る
Tomcatでは、webapps フォルダの中にあるプロジェクトが自動的に読み込まれます。自分でJSPファイルを作って表示するには、ここに新しいフォルダを作成します。
- Tomcatフォルダ内の
webappsに移動。 - 新しくフォルダを作成し、たとえば
jsp-demoという名前をつける。 jsp-demoフォルダの中に、最初のJSPファイルを作成します。ファイル名はhello.jspなど。
エディタの準備
JSPファイルは、普通のテキストファイルとして作成できますが、プログラミングに適したエディタを使うと効率が上がります。以下のいずれかのエディタを使用するのが一般的です。
- Visual Studio Code(無料で軽量、拡張機能が豊富)
- IntelliJ IDEA(Javaに特化した統合開発環境)
- Eclipse(Java開発で定番のIDE)
初心者の方には、Visual Studio Codeが扱いやすくおすすめです。必要に応じて「Java Extension Pack」などを追加すると、補完機能や構文チェックも利用できます。
最初のJSPファイルを作ってみよう
前の章で、JSPを動かすための準備が整いました。この章では、実際にJSPファイルを1つ作成し、それをブラウザで表示するところまで進めます。

ここでは、「JSPとはどういうものか」を実際に体験しながら、基本的な書き方や仕組みを理解していきます。
JSPファイルとはどんなファイルか
JSPファイルは、基本的にはHTMLっぽく見えるコードで、この中の必要な部分にJavaのコードを差し込むことで、表示内容を動的に変えることができるようにしています。たとえば、「現在の日時を表示する」などの処理が可能になります。
JSPファイルの拡張子は .jsp です。ファイルの中には、通常のHTMLタグと、Javaのコードが組み合わさって記述されます。
<%@ page contentType="text/html; charset=UTF-8" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Hello JSP</title> </head> <body> <h1>こんにちは、JSPの世界へようこそ!</h1> <p>現在の時刻は:<%= java.time.LocalDateTime.now() %></p> </body> </html>
上記のJSPファイルの中では、JavaのコードとHTMLが組み合わさっています。それぞれの部分について説明します。

上記のファイルをブラウザで表示するためにエディタで編集して保存しましょう。
- Tomcatの
webappsフォルダの中にある、前章で作成したjsp-demoフォルダに移動。 hello.jspという名前の新しいファイルを作成。- ファイルをエディタで開き、↑の内容を記述し保存!
ブラウザで表示してみる
ファイルを保存したら、Tomcatが起動していることを確認し、ブラウザで次のURLにアクセスしてみましょう。
画面に「こんにちは、JSPの世界へようこそ!」という見出しと、現在の時刻が表示されていれば成功です。
ブラウザでページを更新するたびに、時刻が変化するはずです。これは、JSPがアクセスされるたびにJavaのコードを実行して、ページの中身を動的に作っているということを意味します。
JSPの基本構文
前の章では、JSPファイルを作成し、Javaのコードを埋め込むことで「現在の時刻を表示する」ページを作成しました。ここからは、JSPファイルで使われる代表的な構文について解説します。どのようにJavaのコードをHTMLに差し込むのか、そしてJSP特有の書き方にはどんな種類があるのかを、順を追って学習していきましょう。
JSPの構成要素
JSPでは、以下の4種類の記述形式が用意されています。これらを使い分けることで、Javaの処理とHTMLの表示を同時に扱うことができます。
| 種類 | 記述方法 | 役割 |
|---|---|---|
| ディレクティブ | <%@ ... %> | ページ全体の設定を行う(文字コードなど) |
| スクリプトレット | <% ... %> | Javaの処理(変数の定義や条件分岐など)を書く |
| 式(Expression) | <%= ... %> | Javaの値をそのままHTMLに出力する |
| 宣言 | <%! ... %> | メソッドやフィールドを定義する(あまり使われない) |
ディレクティブ
ディレクティブは、JSPファイル全体に関する設定を行うものです。最もよく使われるのは page ディレクティブです。
<%@ page contentType="text/html; charset=UTF-8" %>

この記述によって、出力するHTMLの文字コードがUTF-8になります。日本語を正しく表示するために必須です。
スクリプトレット
スクリプトレットは、JSPファイル内にJavaの処理を書くための領域です。
<% int year = java.time.LocalDate.now().getYear(); String message = "今年は " + year + " 年です。"; %> <p><%= message %></p>
この例では、Javaで現在の年を取得し、それを文字列として作成しています。そして <%= ... %> を使って、結果をHTMLに出力しています。
スクリプトレットの中ではJavaの文法がそのまま使えます。ただし、後述するようにスクリプトレットは新しい開発ではなるべく使わない方向にあります。
式(Expression)
式は、値をそのままHTMLとして出力したいときに使います。
<p>こんにちは、<%= "JSPユーザー" %>さん!</p>
上の例では、"JSPユーザー" という文字列がHTMLに挿入され、ブラウザには次のように表示されます。
こんにちは、JSPユーザーさん!

この書き方は非常にシンプルで、値を表示するだけであれば便利ですが、複雑な処理は向きません。
宣言
宣言は、JSPファイルの中でメソッドや変数を定義したい場合に使います。
<%!
private String getGreeting(String name) {
return "こんにちは、" + name + "さん!";
}
%>
<p><%= getGreeting("太郎") %></p>
このように、JSPファイルの中で小さな関数を定義して、それを式の中で呼び出すこともできます。ただし、JSPファイルに処理を詰め込みすぎると保守が難しくなるため、このような記述はできるだけ避け、外部のJavaクラスに処理を分けることが望まれます。
コメントの書き方
JSPには、HTMLのコメントと、JSP用のコメントの2種類があります。
<!-- これはHTMLのコメントです(ブラウザの「ページのソース」に表示されます) --> <%-- これはJSPのコメントです(ブラウザには一切表示されません) --%>
HTMLのコメントはWebページに送信されるため、内容を見られる可能性があります。
一方、JSPのコメントはサーバー側で処理が止まるため、セキュリティ的に重要なコメントや開発者向けのメモはJSPのコメントで書くのが安全です。
スクリプトレットはなるべく使わない
JSPの構文として紹介しましたが、スクリプトレット(<% ... %>)の使用は、今では非推奨とされています。理由は以下の通り。
そのため、今後はJSTLやELを使って、できるだけ「Javaコードを書かずに表示を制御する方法」を覚えていくことが大切です。
次の章では、JSTLとEL(式言語)を使った“スクリプトレットを使わない”JSPの書き方を学びます。より読みやすく、安全なJSPの記述方法を習得していきましょう。
ELとJSTLでスクリプトレットのないJSPへ
ここまでの解説では、JSPの基本構文としてスクリプトレット(<% ... %>)などを紹介しました。
しかし近年のJSP開発では、スクリプトレットを使わない記述スタイルが主流となっています。
この章では、EL(Expression Language)とJSTL(JSP Standard Tag Library)という2つの仕組みを使って、JSPファイルの中にJavaコードを書かずに動的な表示を行う方法を学んでいきます。
EL(式言語)とは
EL(Expression Language)は、JSPの中でJavaの値を簡潔に記述するための言語です。
スクリプトレットのように <%= で囲む必要がなく、シンプルに ${変数名} と書くだけで値を出力できます。
<p>こんにちは、${userName} さん。</p>

このコードでは、Javaのサーバー側で userName という名前のデータ(属性)が用意されていれば、自動的にその値が表示されます。
JSTL(JSP標準タグライブラリ)とは
JSTLとは、JSP上で使える共通の処理をあらかじめタグ化したライブラリです。
たとえば、以下のような処理が可能です。
- 条件分岐(if)
- 繰り返し処理(forEach)
- 値のフォーマット(日付や数値)
- URLの生成
JSTLを使うことで、複雑なJavaの処理をわかりやすいタグで書くことができるようになります。
JSTLを使う準備
JSTLを使うには、JSTLライブラリの .jar ファイルを JSPプロジェクトの中に追加する必要があります。
- JSTLの最新版(Jakarta標準)をダウンロード
→ https://jakarta.ee/specifications/tags/ - ダウンロードした
jakarta.servlet.jsp.jstl-api-x.x.x.jarなどの.jarファイルを、Tomcatのlibフォルダ、またはプロジェクトのWEB-INF/libフォルダにコピーします。 - JSPファイルの先頭に、以下のようにタグライブラリを読み込む宣言を記述します。
<%@ taglib prefix="c" uri="https://jakarta.ee/taglibs/core" %>

この設定により、<c:if> や <c:forEach> などのJSTLタグが使えるようになります。
JSTLで条件分岐をする
スクリプトレットで if 文を書かなくても、JSTLの <c:if> タグを使うことで簡単に条件分岐ができます。
<%@ taglib prefix="c" uri="https://jakarta.ee/taglibs/core" %>
<c:if test="${loginUser != null}">
<p>ようこそ、${loginUser.name} さん</p>
</c:if>
このように、loginUser という属性が null でなければ、挨拶文が表示されます。
JSTLで繰り返し表示をする
リストや配列の内容を繰り返し表示するには、<c:forEach> を使います。
サーバー側で、次のようにリストをセットしておきます(Servletなどで):
List<String> names = List.of("太郎", "花子", "次郎");
request.setAttribute("nameList", names);
JSPファイルでは、次のように記述します:
<%@ taglib prefix="c" uri="https://jakarta.ee/taglibs/core" %>
<ul>
<c:forEach var="name" items="${nameList}">
<li>${name}</li>
</c:forEach>
</ul>
このコードにより、以下のようなHTMLが生成されます:
<ul> <li>太郎</li> <li>花子</li> <li>次郎</li> </ul>
JSPをすっきり保つために
ELとJSTLを使うことで、JSPファイル内にJavaのコードを書く必要がなくなり、HTMLに近い構造を保ちながら動的な処理を行うことができます。
これは、JSPを読みやすく・保守しやすくする上でも非常に重要です。
また、デザイナーと共同で作業するようなプロジェクトでも、HTMLに近い見た目を保つことで、分業がしやすくなります。
フォームからデータを受け取る
JSPを使ってWebアプリケーションを作成する際、ユーザーの入力に応じて処理を行うことは非常に重要です。この章では、HTMLのフォームを使って入力されたデータを、JSPで受け取って表示する方法を学びます。
フォーム送信の流れ
フォームを使った処理は、次のような流れで行われます。
- 入力フォームのあるページ(JSP)を表示する
- ユーザーが名前などの情報を入力し、送信ボタンを押す
- 入力内容がサーバーに送られる
- 受け取ったJSPファイルがその情報を読み取り、画面に表示する
JSPではこの一連の流れを、HTMLとJavaの仕組みで簡単に実現できます。
フォームを作るJSP(entry.jsp)
まずは、名前を入力するための簡単なフォームを作成します。
entry.jsp
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>名前の入力</title>
</head>
<body>
<h2>お名前を入力してください</h2>
<form action="result.jsp" method="post">
<label>名前:<input type="text" name="username" /></label>
<input type="submit" value="送信" />
</form>
</body>
</html>
このページでは、名前を入力して「送信」ボタンを押すと、result.jsp にPOSTリクエストでデータが送信されます。
データを受け取るJSP(result.jsp)
次に、送信されたデータを受け取って表示するためのJSPファイルを作成します。
result.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>入力結果</title>
</head>
<body>
<h2>ようこそ!</h2>
<p>あなたの名前は <strong><%= request.getParameter("username") %></strong> さんですね。</p>
</body>
</html>
ここでは、request.getParameter("username") というコードで、フォームから送られたデータを取得しています。
requestはJSPに自動で用意されているオブジェクト。getParameter("username")は、フォームのname="username"に対応した値を取得するメソッド。
ELを使って書き換える
JSTLやELを使えば、result.jsp をもっとすっきり書くこともできます。以下のようにリクエスト属性に値をセットしてから表示することで、式言語を活用できます。
Servlet側(例)
String name = request.getParameter("username");
request.setAttribute("username", name);
request.getRequestDispatcher("/result.jsp").forward(request, response);
result.jsp:
<%@ taglib prefix="c" uri="https://jakarta.ee/taglibs/core" %>
<p>こんにちは、${username} さん!</p>
ただし、Servletを使う方法はこのガイドの後半で詳しく扱いますので、今はまず request.getParameter() による受け取りに慣れることをおすすめします。
セッションとCookieでデータを保持する
JSPでは、ユーザーが入力した情報を「別のページでも使いたい」という場面がよくあります。
たとえば、ログイン状態を維持したり、前の画面で入力された名前を次の画面でも表示したりする場合です。
そのようなときに役立つのが セッション(Session) と クッキー(Cookie) です。
この章では、それぞれの役割と使い方を学びます。
セッションの基本操作
データの保存:
<%
String name = request.getParameter("username");
session.setAttribute("userName", name);
%>
このコードは、userName という名前でセッションに値を保存します。
データの取得:
<%
String name = (String) session.getAttribute("userName");
%>
<p>ようこそ、<%= name %> さん</p>
このようにすれば、前のページで保存した値を、別のページで取り出して使うことができます。
セッションの有効期間と注意点
セッションは、ユーザーがブラウザを閉じるか、一定時間操作をしないと自動的に無効になります。Tomcatの初期設定では、30分間操作がないとセッションが切れます。
また、多くの情報をセッションに保存しすぎると、サーバーのメモリを圧迫する可能性があるため、用途を絞って使うことが大切です。
Cookieとは
Cookie(クッキー)は、情報をユーザーのブラウザに保存する仕組みです。
サーバー側から「この情報を保存しておいてください」と指示すると、ブラウザがその内容を保持し、次回以降のアクセス時にその情報を自動的に送信してきます。
Cookieの基本操作
Cookieの作成と送信:
<%
String name = request.getParameter("username");
Cookie cookie = new Cookie("userName", name);
cookie.setMaxAge(60 * 60); // 1時間(秒単位)
response.addCookie(cookie);
%>
Cookieの取得:
<%
String name = "";
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie c : cookies) {
if ("userName".equals(c.getName())) {
name = c.getValue();
}
}
}
%>
<p>こんにちは、<%= name %> さん</p>
このように、Cookieを使えば、ブラウザに保存された情報を次回のアクセス時にも利用できます。
セッションとCookieの使い分け
| 比較項目 | セッション | Cookie |
|---|---|---|
| 保存場所 | サーバー側 | ブラウザ側 |
| 有効期間 | ログアウトや時間切れまで | 明示的に期限を設定できる |
| データの大きさ | 比較的大きなデータがOK | 少量(4KBまで) |
| セキュリティ | 比較的安全(外部に見えない) | 攻撃に注意が必要(盗聴・改ざん) |
一時的な状態保持(ログイン情報など)にはセッション、
ユーザーに関連する設定(言語選択やテーマなど)にはCookieがよく使われます。
JSPで簡単なアンケートアプリを作ろう
JSPを使ってWebアプリケーションを作るには、「複数ページにまたがる処理」を整理することが大切です。
この章では、3画面構成のアンケートアプリを作り、情報の受け渡し、表示の切り替え、セッションの活用を総合的に体験します。
アプリの構成と目的
このアプリでは、以下のような流れでユーザーにアンケートに答えてもらい、最終画面でまとめて表示します。
- 入力画面:名前と好きな色を入力(form)
- 確認画面:入力された内容を表示(セッションで一時保持)
- 完了画面:ありがとうメッセージと入力内容の最終確認
プロジェクト構造
jsp-demo/ ├─ input.jsp (入力画面) ├─ confirm.jsp (確認画面) └─ thanks.jsp (完了画面)
入力画面:input.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>アンケート入力</title></head>
<body>
<h2>アンケートにご協力ください</h2>
<form action="confirm.jsp" method="post">
<p>お名前:<input type="text" name="userName" /></p>
<p>好きな色:
<select name="favoriteColor">
<option value="赤">赤</option>
<option value="青">青</option>
<option value="緑">緑</option>
</select>
</p>
<input type="submit" value="確認画面へ" />
</form>
</body>
</html>
確認画面:confirm.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<%
String userName = request.getParameter("userName");
String favoriteColor = request.getParameter("favoriteColor");
session.setAttribute("userName", userName);
session.setAttribute("favoriteColor", favoriteColor);
%>
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>確認画面</title></head>
<body>
<h2>以下の内容でよろしいですか?</h2>
<p>お名前:<%= userName %></p>
<p>好きな色:<%= favoriteColor %></p>
<form action="thanks.jsp" method="post">
<input type="submit" value="送信する" />
</form>
</body>
</html>
完了画面:thanks.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<%
String name = (String) session.getAttribute("userName");
String color = (String) session.getAttribute("favoriteColor");
// 必要があればセッションのデータを破棄
session.invalidate();
%>
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>送信完了</title></head>
<body>
<h2>ご協力ありがとうございました!</h2>
<p><strong><%= name %></strong> さんの好きな色は <strong><%= color %></strong> ですね。</p>
</body>
</html>


