Javaの学習を進め、Webアプリケーション開発の領域に入ると必ず登場する2つの大きな壁、それが「サーブレット(Servlet)」と「JSP(JavaServer Pages)」です。
「どちらもサーバー側でJavaを動かす技術みたいだけど、何が違うの?」
「基本情報技術者試験の勉強で単語は見たけれど、具体的なイメージが湧かない……」
そんな悩みを抱えていませんか?
この記事では、プロのシニアエンジニアが、身近な例え話(メタファー)を交えながら、サーブレットとJSPの仕組み、違い、そしてなぜ2つに分かれているのか(MVCモデル)を分かりやすく解説します。
本記事の全体構成(目次)
- 結論:サーブレットとJSPは「動的なWebページを作るJavaの兄弟技術」
- サーブレット(Servlet)とは?:Javaの中にHTMLを書く「制御のプロ」
- JSP(JavaServer Pages)とは?:HTMLの中にJavaを書く「見た目のプロ」
- なぜ2つに分かれているの?「MVCモデル」による分業の魔法
- 一覧で整理!サーブレットとJSPの比較表
- 基本情報技術者試験で狙われる「裏側の仕組み(Webコンテナ)」
- 2026年現在の立ち位置:Spring BootやJakarta EEとの関係性
- まとめ & さらに学びを深める参考リンク集
1. 結論:サーブレットとJSPは「動的なWebページを作るJavaの兄弟技術」
結論からお伝えします。サーブレットとJSPは、どちらも「サーバー側で動的にHTML(Webページ)を生成して、ブラウザに返すためのJavaの技術」です。
ユーザーがボタンを押したタイミングによって画面の表示内容を変えたり、データベースから検索した結果を画面に表示したりするシステム(動的システム)を作るために存在します。
しかし、そのアプローチ(得意分野)が真逆です。
- サーブレット:Javaプログラムが主役。プログラムの中にHTMLを無理やり埋め込む。
- JSP:HTMLファイルが主役。HTMLの中にJavaプログラムをパーツとして埋め込む。
現代のWeb開発では、この2つの得意分野を活かして「役割分担(分業)」をさせるのが鉄則となっています。
2. サーブレット(Servlet)とは?:Javaの中にHTMLを書く「制御のプロ」
サーブレットの正体は、「サーバー上で動くJavaのクラス(プログラム)」です。
ブラウザからの「このデータを保存して」「検索して」というリクエスト(要求)を受け取り、計算をしたり、データベースとやり取りしたりする「裏方の制御」が大の得意です。
💡 レストランでの例え話:
サーブレットは、厨房で黙々と料理を作る**「敏腕シェフ」**です。
お客さんの注文(リクエスト)に応じて、肉を焼いたりソースを作ったり(ロジックの処理)を正確に行います。
具体的なコードのイメージを見てみましょう。
package com.example;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 文字コードの設定
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
// Javaコードの中でHTMLを出力する
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head><title>Servlet Sample</title></head>");
out.println("<body>");
out.println("<h1>こんにちは!サーブレットの世界へ</h1>");
out.println("<p>これはJavaプログラムが生成した画面です。</p>");
out.println("</body>");
out.println("</html>");
}
}
Javaのコードの中に、out.println() を使って無理やりHTMLのタグを書き込んでいるのが分かります。
これ、短いHTMLなら問題ありませんが、何百行もある複雑なデザインのWebページをこの方式で書こうとすると、文字列のプラス結合やダブルクォーテーションだらけになり、コードが読めなくなってしまいます。
そこで「デザイン(HTML)をベースに楽に書ける仕組みが欲しい」という要望から生まれたのがJSPです。
3. JSP(JavaServer Pages)とは?:HTMLの中にJavaを書く「見た目のプロ」
JSPの正体は、「HTMLベースのファイルに、Javaコードを少しだけ埋め込める技術」です。ファイルの拡張子は .jsp になります。
見た目のデザイン(画面表示)を作るのが大の得意です。
💡 レストランでの例え話:
JSPは、出来上がった料理をお皿に綺麗に盛り付け、お客さんのテーブルへ運ぶ 「ホールスタッフ(接客係)」 です。
お客さんから直接見える「華やかな表舞台」を担当します。
具体的なコードのイメージを見てみましょう。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
<title>JSP Sample</title>
</head>
<body>
<h1>こんにちは!JSPの世界へ</h1>
<p>基本は普通のHTMLファイルと同じように書けます。</p>
<%-- JSPタグを使ってJavaのコードを埋め込む --%>
<p>現在のサーバー時刻は: <strong><%= new java.util.Date() %></strong> です。</p>
</body>
</html>
ベースは完全なHTMLです。しかし、<%= ... %> という特殊なタグ(スクリプトレットや式言語などと呼ばれます)を使うことで、ピンポイントでJavaのプログラム(ここでは現在時刻の取得)を埋め込んでいます。
これなら、Javaを詳しく知らないWebデザイナーであっても、HTMLやCSSを修正する感覚で画面のデザインを手軽に変更できます。
4. なぜ2つに分かれているの?「MVCモデル」による分業の魔法
「最初からどちらか片方に統一すればよかったのでは?」と思うかもしれません。
しかし、1つのファイルに「データの計算処理」と「画面のデザイン」を同時に書くと、コードが複雑怪奇になり、バグの温床になります。
そこで、Web開発の世界では「MVC(Model-View-Controller)モデル」という設計思想を用いて、これらを明確に分業させています。基本情報技術者試験でも非常によく出題される重要な概念です。
-
Controller(制御):サーブレットが担当
ブラウザからのリクエストを最初に受け取る総合窓口です。入力されたデータのチェックや、次のModelへの命令、次にどの画面(JSP)を表示するかの割り振りをコントロールします。 -
Model(ビジネスロジック):通常のJavaクラスが担当
システムの本体です。計算処理、データベースへの値の保存や検索など、純粋な「業務処理」を行います。 -
View(画面表示):JSPが担当
Controllerから受け取った処理結果のデータを、HTMLに綺麗に盛り付けてユーザーのブラウザに表示します。
この3つの連携によって、1つのWebアプリケーションが安全かつ効率的に動作します。
5. 一覧で整理!サーブレットとJSPの比較表
2つの特徴と違いを一覧表にまとめました。頭の中の整理に活用してください。
| 項目 | サーブレット(Servlet) | JSP(JavaServer Pages) |
|---|---|---|
| ファイルの拡張子 | .java |
.jsp |
| ベースとなる記述 | Javaプログラムがベース | HTMLがベース |
| MVCモデルの役割 | C(Controller:司令塔・制御) | V(View:画面表示・見た目) |
| 主な記述内容 | データの受け取り、分岐、Modelの呼び出し | HTMLタグ、データの表示用タグ |
| メリット | 複雑な条件分岐やデータ処理が書きやすい | 画面のデザインやレイアウトの調整が簡単 |
| デメリット | HTMLを文字列として書くためデザインが苦行 | Javaのロジックを大量に書くと泥沼化する |
6. 基本情報技術者試験で狙われる「裏側の仕組み(Webコンテナ)」
基本情報技術者試験の受験者は、表面上の違いだけでなく、「サーバーの内部でどう動いているか」という仕組みを理解しておく必要があります。試験で狙われやすいポイントは以下の2点です。
① Webコンテナ(サーブレットコンテナ)の存在
サーブレットやJSPは、パソコンで普段動かすJava(public static void main から始まるプログラム)のように単体でダブルクリックしても動きません。
「Webコンテナ(サーブレットコンテナ)」と呼ばれる専用の実行環境ソフトウェアが必要です。代表的な製品には、オープンソースの Apache Tomcat(トムキャット) があります。
② JSPは裏側で「サーブレット」に変換されている!
驚くべきことに、JSPファイルはそのまま実行されているわけではありません。
ユーザーからJSPへ初めてアクセスがあった際、Webコンテナが裏側で以下のステップを自動的に行っています。
-
.jspファイルを解析する -
自動的に
.javaのサーブレットソースコードへ翻訳する(すべてのHTMLがout.printlnに変換される) - Javaのコンパイラを使い、
.classファイル(バイトコード)にコンパイルする - メモリ上にロードして実行する
つまり、「JSPの正体は、書き方をHTML風にしたサーブレットそのもの」なのです。Webコンテナがこの翻訳を自動でやってくれるからこそ、私たちは楽に画面を作ることができます。
7. 2026年現在の立ち位置:Spring BootやJakarta EEとの関係性
「サーブレットやJSPって、昔の古い技術なんじゃないの?」という声を耳にすることがあるかもしれません。
確かに現代のJava開発では、生のサーブレットやJSPをゼロからガリガリ書くケースは減っています。現在は Spring Boot という強力なフレームワークを使うのが業界の標準(主流)です。
しかし、Spring Bootの内部(背後)では、今でもサーブレット(DispatcherServlet)がすべてのリクエストを受け取る中心核として大活躍しています。
また、長年「Java EE」と呼ばれていたエンタープライズ向け仕様は、現在はEclipse財団に移管され、「Jakarta EE」という新しいブランド名で進化を続けています。パッケージ名が javax.servlet から jakarta.servlet に刷新され、2026年現在も最新仕様(Jakarta EE 10/11など)がリリースされ、クラウド環境への最適化が進んでいます。
土台にあるサーブレットの仕組みを理解しているエンジニアは、Spring Bootなどのモダンな技術を使った際にも、トラブルシューティングや内部の挙動理解が圧倒的に早くなります。
8. まとめ
- サーブレットはJavaベースで制御(Controller)を担当する。
- JSPはHTMLベースで画面表示(View)を担当する。
- 2つをMVCモデルに則って役割分担させることで、保守性の高いシステムができる。
- JSPは実行時、Webコンテナによって自動的にサーブレットへ変換・コンパイルされている。
- 現代主流のSpring Bootの裏側でも、サーブレットの仕組みは現役で動き続けている。
基礎をしっかり押さえておけば、試験対策だけでなく、実務のWebアプリケーション開発でも迷うことはなくなります。一歩ずつ、理解を深めていきましょう!
さらに学びを深める参考リンク集
-
試験の最新シラバスや過去問の確認に必須の公式サイトです。
-
サーブレットを含む、現在のJavaエンタープライズ仕様(Jakarta EE)の公式ドキュメントと最新動向が確認できます。
-
世界中で使われている代表的なWebコンテナ(サーブレットコンテナ)「Tomcat」の公式ページです。