Java Servlet (Javaサーブレット)とは
Java Servletは、
Javaで作成された
サーバーサイドプログラムの仕様であり、動的なWebページの生成やデータ処理を行うための技術です。通常「サーブレット」と呼ばれることが多く、
Jakarta EEの重要な機能の一つとして位置づけられています。ショッピングサイトやオンラインバンキングなど、動的なWebサイト構築に広く利用されています。
概要
サーブレットは
サーバーサイド技術として登場しました。類似技術としては、
Perlを用いたCGIや、PHPを
Apache HTTP Server上で動作させるmod_php、MicrosoftのASPなどが挙げられます。CGIが
リクエストごとに新しい
プロセスを起動するのに対し、サーブレットはメモリに常駐し、
リクエストごとに軽量なスレッドを起動するため効率的です。また、
Javaで記述されているため、さまざまなプラットフォームで動作可能です。
Servlet 2.3からは、フィルター機能が導入され、サーブレットの実行前後に処理を差し込むことができるようになりました。
サーブレット技術の延長線上にはJSP(
JavaServer Pages)があります。JSPは内部でサーブレットを自動生成して動作します。厳密には異なる技術ですが、両者は組み合わせて利用されることが多いため、JSPもサーブレットの一部として扱われることがあります。
サーブレットの実行環境はWebコンテナまたはサーブレットコンテナと呼ばれます。これらの用語はしばしば区別されずに使われますが、純粋にサーブレット処理を行うものをサーブレットコンテナと呼び、サーブレットコンテナを含むJSPやHTTP
サーバー機能を持つものをWebコンテナと呼ぶ傾向があります。Webコンテナとしては、Apache Tomcat, Jetty, BEA WebLogic Server, IBM WebSphere Application Server, Resin, JBossなどが存在します。
当初、
JavaはAppletなどのクライアントサイド技術として注目されていました。しかし、サーブレットの登場以降、
サーバーサイドで
Javaプログラムを実行する形態が急速に普及しました。この
サーバーサイドで
Javaプログラムを実行する形態を「
サーバーサイド
Java」と呼びます。
役割
JSPの登場により、
Java Servletは主にデータの入出力処理(Controller)を担当することが推奨されています。これはModel View Controller(MVC)モデルに基づく役割分担です。
歴史
サーブレットの歴史は、Webアプリケーション開発における
サーバーサイド技術の進化と深く結びついています。初期のWeb技術では、CGIなどが利用されていましたが、
Java Servletの登場により、より効率的でプラットフォームに依存しないWebアプリケーション開発が可能になりました。 Servlet 2.3でフィルター機能が導入されたことで、処理の前後に共通の処理を差し込むことが容易になり、コードの再利用性と保守性が向上しました。
サーブレットの進化は、JSPのような他の
JavaベースのWeb技術の開発にも影響を与えました。JSPはHTMLに
Javaコードを埋め込むことができ、動的なWebページをより簡単に作成できるようになりました。このように、サーブレットは
JavaベースのWebアプリケーション開発の中核的な技術であり、
Jakarta EE (旧
Java EE) の重要な構成要素として現在も広く利用されています。
例
以下は、`service()`メソッドが何回呼ばれたかを出力する簡単なサーブレットの例です。サーブレットは`Servlet`インターフェースを実装する必要があります。通常は、プロトコルに依存しない`GenericServlet`抽象クラス、またはHTTP用のサブクラスである`HttpServlet`クラスを継承して実装します。この例では`HttpServlet`クラスを継承しています。
java
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 CounterServlet extends HttpServlet {
private int count = 0;
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
count++;
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
out.println("
Counter Servlet");
out.println("
Counter: " + count + "
");
out.println("");
}
}
`service()`メソッドは、サーブレットへの
リクエストごとに実行されるメソッドです。`HttpServlet`クラスを継承する場合、`doGet()`, `doPost()`, `doPut()`, `doDelete()`などのHTTPメソッドごとのメソッドに処理を分岐させることができます。この例では、`service()`メソッドを直接オーバーライドしています。
Web.xml定義
サーブレットは、Webアプリケーションのデプロイメント記述子である`web.xml`ファイルで定義されます。`web.xml`では、サーブレットのマッピングや初期化パラメータなどを設定します。
脚注
サーブレットは、Webアプリケーション開発において重要な役割を果たしており、その仕様は
Jakarta EEの一部として継続的に更新されています。サーブレットの理解は、Webアプリケーション開発の基礎をなすと言えるでしょう。
関連項目
Jakarta EE
アプリケーション
サーバ
Webアプリケーション
JavaServer Pages (JSP)
JavaBeans
アプレット
外部リンク
Java/communityprocess/final/jsr053/index.html'>Java Servlet 2.3 JSR-053
Java/communityprocess/final/jsr154/index.html'>
Java Servlet 2.4 JSR-154 Final Release
Java/communityprocess/final/jsr154/index2.html'>Java Servlet 2.5 JSR-154 Maintenance Release
Java/communityprocess/final/jsr315/index.html'>
Java Servlet 3.0 JSR-315
Java/communityprocess/final/jsr340/index.html'>Java Servlet 3.1 JSR-340
Java/communityprocess/final/jsr363/index.html'>
Java Servlet 4.0 JSR-363