本ページはプロモーションが含まれています

Java入門

会話で学ぶサーブレット(servlet)

トム

・都内自社開発IT企業勤務/javaのバックエンドエンジニア
/java歴10年以上 ・首都圏在住30代
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎

そもそも「サーブレット」って何者?

「サーブレットって何?」って聞かれると、“HTTPリクエストを受け取ってレスポンス返すやつ”くらいしか言えないんだよね。

その答え、実務的には100点。でも哲学的には30点。まず言葉を解剖しよう。

語源:Servlet = Serve + let

「Servlet」は Serve + let の合成語。

  • serve:提供する、仕える
  • -let:小さいもの(book → booklet、pig → piglet)

つまり直訳すると、

「小さなサーバー」

ここで一度立ち止まるのが重要。

小さなサーバー?

Tomcatとかがサーバーじゃないの?

その違和感、正しい。

ここで「サーバーとは何か」が分岐点になる。

サーバーとは何か(哲学編)

「サーバー」って言葉、実は2つの意味が混ざってる。

  1. 物理・論理的なサーバー(マシン、プロセス)
  2. リクエストに応答する存在

Servlet が指すのは 2番目

つまり「HTTPリクエストを受けて、何かを返す存在」?

そう。それが“サーブする”という行為。

だから Servlet はこう言い換えられる。

「リクエストに応じて動く、小さな処理単位」

なぜ「小さい」のか?

でもさ、今のWebアプリって巨大じゃない?

そこがポイント。

昔のCGI時代を想像してみて。

  • リクエストが来る
  • プロセスが起動する
  • 処理が終わる
  • プロセスが死ぬ

毎回これだとめちゃ重い。

あー、fork地獄。

そう。そこで Sun が考えた。

「常駐する軽い部品が、リクエストごとに動けばよくない?」

それが Servlet

  • 常駐してる
  • 小さい
  • 必要なときだけ呼ばれる

だから “let”(小さいやつ)

Servletの正式な定義(ちゃんとしたやつ)

技術的に言うとこう。

Servletとは、サーバー上で動作し、クライアントからのリクエストを処理してレスポンスを生成するJavaクラス

ポイントは3つ。

  1. サーバー上で動く
  2. リクエスト駆動
  3. Javaで書かれる

じゃあTomcatは?

Tomcatは「Servletを動かす環境」。

正式には Servletコンテナ

Servletコンテナという黒幕

Servletは単体じゃ生きられない。

ライフサイクル管理を全部やってくれる存在が必要。

それが Servletコンテナ

  • インスタンス生成
  • init() 呼び出し
  • リクエストごとの service()
  • destroy()

全部コンテナの仕事。

つまり Servlet は「雇われ労働者」?

まさにそれ。

Tomcatは会社。Servletは社員。

なぜ今もServletなのか?

でも今はSpring MVCとか使うじゃん?

ここが一番誤解されるところ。

Spring MVC も、裏では Servletの上に立ってる

HTTPリクエスト
  ↓
DispatcherServlet(←これもServlet)
  ↓
Controller

Servletは「土台」。

地味だけど、全てを支えてる。

本質的な定義

ここまでを一文にするとこう。

Servletとは「HTTPという会話に、状態を持たずに応答するための最小単位」

  • 状態を持たない(基本は)
  • リクエスト駆動
  • 生存管理は他者任せ

これはまるで――

禅僧のような存在

必要な時だけ現れて、仕事をして、消える。

サーブレットは偉大な存在だね

たとえ話

Servletを「飲食店」に例えると、

  • Tomcat:建物・店長・インフラ全部
  • Servlet:厨房の料理人
  • HTTPリクエスト:注文
  • レスポンス:料理

料理人は注文が来た時だけ動く。

店の経営はしない。

でも料理の質は、すべて彼にかかっている。

まとめ

  • Servlet = Serve + let(小さなサーバー)
  • HTTPリクエストを処理する最小単位
  • 常駐するが、自分で生きてはいない
  • コンテナに管理される存在
  • 現代フレームワークの土台
  • この記事を書いた人
  • 最新記事

トム

・都内自社開発IT企業勤務/javaのバックエンドエンジニア
/java歴10年以上 ・首都圏在住30代
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎

-Java入門