1.

サーブレット

編集

サーブレットの記事です。ServletはJava EE / Jakarta EE 標準のWebコンポーネントで、Webサーバー上で動作してHTTPリクエストを処理し、HTMLやJSONなどのレスポンスを返すサーバーサイドJavaの基本単位です。

サーブレットとは

項目内容
役割HTTPリクエストを受けてレスポンスを返すJavaクラス
動作環境サーブレットコンテナ(Tomcat、Jetty、WildFly等)
名前空間javax.servlet(Java EE)/ jakarta.servlet(Jakarta EE 9+)
主要クラスHttpServletHttpServletRequestHttpServletResponse

基本のサーブレットの最小例

import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.WebServlet;
import java.io.*;

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse res)
        throws IOException {
        res.setContentType("text/html; charset=UTF-8");
        PrintWriter out = res.getWriter();
        out.println("<h1>Hello, Servlet!</h1>");
    }
}

HTTPメソッド別のオーバーライド

メソッド処理するHTTPメソッド
doGet()GET
doPost()POST
doPut()PUT
doDelete()DELETE
doHead()HEAD
doOptions()OPTIONS

主要なリクエスト処理API

呼び出し取得内容
req.getParameter("name")クエリパラメータ/フォームフィールド
req.getHeader("X-...")HTTPヘッダ
req.getCookies()Cookie配列
req.getSession()セッション取得(無ければ作成)
req.getRemoteAddr()クライアントIP
req.getInputStream()リクエストボディ(POST/PUT)
req.getRequestDispatcher("/x.jsp").forward(req, res)JSPへフォワード

レスポンス処理

// ステータス設定
res.setStatus(404);

// Content-Type
res.setContentType("application/json; charset=UTF-8");

// ヘッダ
res.setHeader("X-Custom", "value");

// Cookie
res.addCookie(new Cookie("k", "v"));

// リダイレクト
res.sendRedirect("/another");

// 本文書き込み
res.getWriter().println("Hello");

web.xml と アノテーション

サーブレットのURLマッピングは2通りの書き方があります。

1. アノテーション(Servlet 3.0以降、推奨)

@WebServlet("/users/*")
public class UserServlet extends HttpServlet { ... }

2. web.xml(古典的)

<servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>com.example.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
</servlet-mapping>

サーブレットのライフサイクル

  1. init(): コンテナ起動時または初回呼び出し時に1度
  2. service() → doGet/doPost...: リクエストごとに呼ばれる(マルチスレッド)
  3. destroy(): コンテナ停止時/再デプロイ時

1つのサーブレットインスタンスを複数スレッドが共有するため、フィールド変数の使い方に注意(スレッドセーフ性)。

サーブレットとJSPの関係

  • サーブレット: 主にロジック処理
  • JSP: HTML生成(サーブレットに変換されて実行)
  • 典型的なMVC: サーブレットがリクエスト処理 → JSPで表示

注意点

  • Java EE 8 → Jakarta EE 9javax.servletjakarta.servlet にリネーム。古い記事のサンプルはimport文に注意
  • Tomcat 10以降は Jakarta EE 9+。Tomcat 9以前は javax.*
  • 大規模アプリでは直接サーブレットを書くより Spring 等のフレームワーク利用が主流

関連

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. サーブレット
  2. DI
  3. CDI
  4. EJB
  5. JAX-RS
  6. REST