【Java】サーブレットとは?仕組み・メリット・JSPとの違いを初心者向けに解説

サーブレット_アイキャッチ画像 Java

サーブレットとは?

サーブレット(Servlet)とは、サーバ上で動くJavaプログラムのことです。

主にWebアプリケーションを作る際に使われます。

Webアプリケーションとは、インターネットに接続すれば、特別なインストールをすることなく使用できるサービスのことです。例えば、YouTubeやGmail、ネットショッピングサイトなどもWebアプリケーションの1つです。

では、それらのWebアプリケーションを作る時に、サーブレットはどのように使われているのでしょうか?

サーブレットは、クライアントの要求(リクエスト)に応じた処理を実行します。

例えば、Amazonでネットショッピングをする時を考えてみましょう。

この時、クライアントはあなた自身(あなたが操作しているWebブラウザ)です。あなたは「本」を購入したいと考え、検索欄に「本」と入力して検索すると、「本」に関する検索結果が表示されます。

これは、クライアントで入力された情報(「本」を検索したという情報)をサーブレットが受け取り、「本」に関する検索結果のページを生成して返す処理を行ったからです。

もちろん、検索ワードを変えても、検索ワードに応じたページを表示してくれます。また、検索以外にも「商品をカートに入れる」処理や「欲しいものリストに保存する」処理など、クライアントの様々な要求に応じて処理を行ってくれます。

サーブレットの処理イメージ

このように、サーブレットを使うことによって、クライアントの要求に応じた動的な処理を行うことができるのです。

サーブレットコンテナとは

ここで重要なポイントがあります。サーブレットは単独では動作せず、サーブレットコンテナ(実行環境)と呼ばれるソフトウェアの中で動かす必要があります。

代表的なサーブレットコンテナには、以下のようなものがあります。

  • Apache Tomcat
  • GlassFish
  • WildFly

サーブレットコンテナは、クライアントからのHTTPリクエストを受け取り、該当するサーブレットを呼び出し、その処理結果(レスポンス)をクライアントに返すという、サーブレットのライフサイクル全体を管理する役割を担っています。開発者はこの仕組みのおかげで、通信処理の細かい部分を自分で実装せずに、ビジネスロジックの実装に集中できます。

サーブレットとJava EE/Jakarta EEの関係

サーブレットは、Javaの標準仕様である「Java EE(Java Platform, Enterprise Edition)」、現在は「Jakarta EE」と呼ばれる仕様の一部として定義されています。Java EE/Jakarta EEには、サーブレットの他にもJSPやJPA(データベース操作)、JMS(メッセージング)など、エンタープライズ向けWebアプリケーション開発に必要な機能がまとめられています。サーブレットはその中でも、Webアプリケーションの入り口となる最も基本的な技術と位置づけられています。

サーブレットの動作の仕組み

サーブレットがどのように動作しているのか、もう少し具体的に見ていきましょう。

HTTPリクエストとレスポンスの流れ

Webブラウザ(クライアント)とサーバの間の通信は、基本的に次のような流れで行われます。

  1. クライアントがサーバに対してHTTPリクエストを送信する
  2. サーブレットコンテナがリクエストを受け取り、対応するサーブレットを呼び出す
  3. サーブレットがリクエストの内容に応じた処理(データベースの検索や計算など)を行う
  4. 処理結果をHTMLなどの形式に整え、HTTPレスポンスとしてクライアントに返す
  5. クライアント(ブラウザ)が受け取ったレスポンスを画面に表示する

この一連の流れを、サーブレットが中心となってコントロールしています。

GETメソッドとPOSTメソッドの違い(doGet/doPost)

HTTPリクエストには、主に「GET」と「POST」という2つの送信方法があります。サーブレットでは、これらのリクエストをそれぞれ専用のメソッドで処理する仕組みが用意されています。

メソッド 主な用途 サーブレットでの処理メソッド
GET ページの表示、検索結果の取得など doGetメソッド
POST フォームの送信、ログイン情報の送信など doPostメソッド

GETは主に「情報を取得する」ためのリクエストで、URLにパラメータが表示される形式です。一方POSTは「データを送信する」ためのリクエストで、ログインフォームの送信など、パラメータを画面上に表示したくない場合に使われます。

サーブレットを開発する際は、HttpServletクラスを継承し、doGetメソッドやdoPostメソッドをオーバーライド(上書き)することで、それぞれのリクエストに応じた処理を実装します。

具体例:ログイン処理の流れで理解する

GET/POSTの使い分けを、実務でよく見るログイン処理の例で確認してみましょう。

  1. ユーザーがログインページのURLにアクセスする(GETリクエスト)→サーブレットのdoGetメソッドがログイン画面のHTMLを返す
  2. ユーザーがID・パスワードを入力してログインボタンを押す(POSTリクエスト)→サーブレットのdoPostメソッドが送信されたID・パスワードを受け取る
  3. サーブレットが入力内容をデータベースなどと照合し、認証処理を行う
  4. 認証が成功すればマイページへ、失敗すればエラーメッセージ付きのログイン画面へリダイレクトする

このように、1つのサーブレットの中でもリクエストの種類によって処理を分岐させることで、画面表示とデータ処理の両方を実現しています。

サーブレットを使う4つのメリット

サーブレットがWebアプリケーション開発で広く使われているのには、以下のような理由があります。

① ライフサイクル管理による処理の高速化

サーブレットは、リクエストが来るたびに毎回インスタンス(オブジェクト)を生成するのではなく、一度生成したインスタンスを再利用する仕組み(ライフサイクル管理)を持っています。これにより、リクエストごとのオーバーヘッドが抑えられ、高速な処理が可能になります。

② マルチスレッドによる同時処理

サーブレットコンテナは、複数のクライアントからのリクエストをマルチスレッドで同時に処理できます。1つのサーブレットインスタンスが複数のスレッドで並行して動作するため、アクセスが集中する場面でも効率よくリクエストを処理できます。

③ プラットフォームに依存しない

サーブレットはJavaで書かれているため、「一度書けばどこでも動く」というJavaの特徴を引き継いでいます。OSやハードウェアに依存せず、サーブレットコンテナが動く環境であればどこでも実行できます。

④ モジュール化による機能拡張の容易さ

サーブレットは機能単位で分割して実装できるため、新しい機能を追加したり、既存の機能を差し替えたりといった拡張がしやすい構造になっています。大規模なWebアプリケーションでも、保守性を保ちながら開発を進めやすい点がメリットです。

サーブレットのサンプルコード

実際のコードを見ると、サーブレットのイメージがつかみやすくなります。

HelloWorldサーブレットの実装例

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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();
        out.println("<html><body>");
        out.println("<h1>Hello, Servlet!</h1>");
        out.println("</body></html>");
    }
}

このように、Javaのソースコードの中にHTMLタグを文字列として埋め込んで出力しているのが分かります。

JSPとのコードの書き方の違い

同じ処理をJSPで書くと、次のようになります。

<html>
<body>
<h1>Hello, <%= "JSP" %>!</h1>
</body>
</html>

JSPでは、HTMLのソースコードの中にJavaの処理を埋め込んでいる点が、サーブレットと対照的です。この違いは次の章で詳しく解説します。

JSPとの違い

JSP(JavaServerPages)とはJavaServerPagesの略称で、サーブレットと一緒に使われることが多い技術です。

JSPでもサーブレットと同じような処理を実装できますが、書き方に違いがあります。

  • サーブレット:Javaのソースコード内にHTMLコードを埋め込む
  • JSP:HTMLのソースコード内にJavaコードの処理を埋め込む

要するに、サーブレットはJavaファイル、JSPはHTMLファイルで、それぞれに逆側の言語を埋め込めるというイメージです。

比較項目 サーブレット JSP
ベースとなる言語 Java HTML
得意なこと ロジック(データ処理・制御) 画面表示(見た目の構築)
コンパイルのタイミング 事前にコンパイルされる 初回リクエスト時にサーブレットへ変換されてコンパイルされる
向いている用途 リクエストの振り分け、業務処理 HTMLベースの画面出力

JSPはHTMLベースのため、サーブレットよりもHTMLでの出力部分を記述しやすく、画面表示の処理に向いています。

また、コンパイルのタイミングも異なります。JSPはクライアントから初回のリクエストを受信した際に、サーバ内部でサーブレットに変換されてからコンパイルされます。

サーブレットとJSPはどちらを使うべきか

実務では、どちらか一方だけを使うのではなく、役割を分けて併用するのが一般的です。

  • データベースへのアクセスや業務ロジックなど「処理」の部分 → サーブレット
  • 画面に表示するHTML部分など「見た目」の部分 → JSP

このように処理と表示を分離することで、コードの保守性が高まり、複数人での開発もしやすくなります。これは「MVCモデル」と呼ばれる設計パターンの考え方にもつながっています。

サーブレットに関するよくある質問(FAQ)

サーブレットとTomcatの違いは?

サーブレットは「プログラムの仕様(規格)」であり、Tomcatはその仕様を実装した「サーブレットコンテナ(実行環境)」です。サーブレットを動かすには、Tomcatのようなサーブレットコンテナが必要になります。

サーブレットは今でも使われているのか?

Spring Boot等のモダンなフレームワークも、内部的にはサーブレットの仕組みを利用して動作しています。直接サーブレットを書く機会は減っていますが、Webアプリケーションの基盤技術として今も広く使われています。

サーブレットとJSPは一緒に使わないといけないの?

必須ではありませんが、処理(サーブレット)と表示(JSP)を分離できるため、実務では併用されることが多いです。

まとめ

サーブレットとは?
クライアントの要求(リクエスト)に応じた処理を実行するJavaプログラムで、サーブレットコンテナ(Tomcatなど)上で動作します。

サーブレットのメリットは?

  • ライフサイクル管理による処理の高速化
  • マルチスレッドによる同時処理
  • プラットフォームに依存しない
  • モジュール化による機能拡張の容易さ

JSPとの違いは?

  • サーブレットはJavaベース、JSPはHTMLベース
  • サーブレットはロジック処理向き、JSPは画面表示向き
  • コンパイルのタイミングが異なる

サーブレットの基本を理解したら、実際にTomcatなどの環境を用意してサンプルコードを動かしてみると、理解がより深まります。

参考にしたサイト

コメント

タイトルとURLをコピーしました