ジャバ‐サーブレット【Java servlet】
サーブレット
【英】Java Servlet, Servlet
サーブレットとは、Java言語で記述された、Webサーバー上で実行されるプログラムのことである。正確にはJavaサーブレットであるが、多くの場合、単にサーブレットと呼ばれる。
サーブレットは、WebブラウザからWebサーバー上のサーブレットが呼び出されると、必要に応じて検索を実行してHTML文書を動的に生成して、Webブラウザに返送する。
サーブレットは、一度、Webサーバー上で実行されると待機状態になり、複数のクライアントからの要求に対して並行に動作する。CGI(Common Gateway Interface)のように、リクエストのたびにプログラムが読み込まれないため、高速に動作するメリットがある。
Java: | ガーベジコレクション SJC-P Sun Java Studio Creater サーブレット サーバサイドJava サーブレットコンテナ サンドボックス |
Java Servlet
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/09/26 04:08 UTC 版)
![]() |
この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。(2021年6月)
|
Jakarta Servlet(ジャカルタ サーブレット)とは、Eclipse Foundationが開発している、サーバ上でウェブページなどを動的に生成したりデータ処理を行うために、Javaで作成されたプログラム及びその仕様で、Jakarta EE Platformの一部。Java 8まではJava Servlet(ジャバ サーブレット)という名称で、Java Platform, Enterprise Editionの一部だった。単にServlet(サーブレット)と呼ばれることが多い。この機能を用いてショッピングサイトやオンラインバンキングなどをはじめとする多種多様な動的なWebサイトが構築されている。
概要

Servletはサーバサイド技術として登場した。
同様の技術(すなわち対抗技術)としてはPerlなどを用いたCGI、PHPプログラムのプロセスをApache HTTP Server上で動かすことができるmod_phpなどのモジュール、マイクロソフトが提供するASPなどがある。CGIがクライアントのリクエストのたびに新しいプロセスを起動するのに対して、サーブレットはメモリに常駐して、リクエストのたびにプロセスより軽量なスレッドを起動するので、効率がよい。また、サーブレットはJavaで書かれているのでさまざまなプラットフォームで使うことができる。
Servlet 2.3からは、フィルター機能が追加され、Servletの実行前後に処理を差し込むことが可能となった。
サーブレットの技術の延長としてJSPがあるが、JSPはサーブレットを自動生成して動作している。厳密に言えばサーブレットとJSPは違う技術だが、これらは組み合わせて使うのが一般的なため、JSPもサーブレットの一部として扱われることが多い。
サーブレットの実行環境(実行するためのソフトウェア)はWebコンテナ、またはサーブレットコンテナと呼ばれる。これらの言葉はあまり区別されずに使われることも多いが、純粋にサーブレットの処理を行うものをサーブレットコンテナと呼び、サーブレットコンテナを含みJSPやHTTPサーバとしての機能も含むものをWebコンテナと呼ぶ傾向がある。
Webコンテナとしては、Apache Tomcat, Jetty, BEA WebLogic Server, IBM WebSphere Application Server, Resin, JBossなどがある。
サーバサイドJava
当初、JavaはAppletなどのクライアント側でJavaプログラムを稼動させるクライアントサイドの技術として注目を集めていた。しかし、サーブレットの登場以降、サーバ側でJavaプログラムを稼動させる形態が急速に普及した。こうしたサーバ側でJavaプログラムを稼動させる形態をサーバサイドJavaと呼ぶ。
役割
JSPの登場により、Servletはデータの入出力処理 (Controller) を担当することが推奨される。これはModel View Controller (MVC) による役割付けである。
歴史
バージョン | リリース | プラットフォーム | 内容 |
---|---|---|---|
1.0 | 1997/01 | -- | -- |
2.0 | JDK 1.1 | Java Servlet Development Kit 2.0の一部としてリリース | |
2.1 | 1998/11 | -- | 公式な初版、RequestDispatcher, ServletContextを追加 |
2.2 | 1999/08 | J2EE 1.2 J2SE 1.2 |
J2EEの一部となる |
2.3 | 2001/08 | J2EE 1.3 J2SE 1.2 |
Filter機能追加 |
2.4 | 2003/11 | J2EE 1.4 J2SE 1.3 |
web.xml にXML Schema を利用 |
2.5 | 2005/09 | Java EE 5 Java SE 5 |
Java SE 5が必須となる, annotationをサポート |
3.0 | 2009/12 | Java EE 6 Java SE 6 |
開発容易性の実現, 動的設定, login/logoutメソッドサポート, 非同期Servlet, アノテーションSecurity, Fileアップロード |
3.1 | 2013/05 | Java EE 7 Java SE 7 |
クラウド対応, ノンブロッキング処理用I/O APIの追加, WebSocket等へのプロトコルアップグレードの対応, セキュリティ機能の強化[1] |
4.0 | 2017/09 | Java EE 8 Java SE 8 |
HTTP/2サポート |
バージョン | リリース | プラットフォーム | 内容 |
---|---|---|---|
4.0[2] | 2019/08/13 | Jakarta EE 8 Java SE 8以降 |
「Java」の商標から名前が変更。Java ServletからJakarta Servletに名前が変わった。 |
5.0[3] | 2020/09/07 | Jakarta EE 9 Java SE 8以降 |
APIがパッケージjavax.servletからjakarta.servletに移動 |
6.0[4] | 2022/05/12 | Jakarta EE 10 Java SE 11以降 |
非推奨の機能の削除と、リクエストされた拡張機能を実装 |
6.1[5] | 2024/03/28 | Jakarta EE 11 Java SE 17以降 |
例
以下は、service()
メソッドが何回呼ばれたかを出力する単純なサーブレットである。
サーブレットはServlet
インタフェースを実装する必要がある。サーブレットの実装は通常、プロトコルに依存しない抽象クラスであるGenericServlet
か、HTTP用のサブクラスであるHttpServlet
クラスを継承することで行う。この例ではHttpServlet
クラスを継承している。
service()
メソッドはサーブレットのリクエストごとの処理を記述するメソッドである。HttpServlet
クラスを継承する場合、ここからさらにdoGet()
, doPost()
, doPut()
, doDelete()
といったHTTPメソッドごとのメソッドに分岐させることができる。ただし、以下の例ではその機能を使わず、直接service()
メソッドをオーバーライドしている。
import jakarta.servlet.ServletConfig;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
public class ServletLifeCycleExample extends HttpServlet {
private int count;
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
getServletContext().log("init() called");
count = 0;
}
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
getServletContext().log("service() called");
count++;
response.getWriter().write("Incrementing the count: count = " + count);
}
@Override
public void destroy() {
getServletContext().log("destroy() called");
}
}
web.xml定義
脚注
- ^ “Java Servlet 3.1の新機能――クラウド対応のJava EE 7でどう変わるのか?【Java EEエキスパート・シリーズ】”. オラクル (2012年8月6日). 2014年2月23日閲覧。
- ^ “Jakarta Servlet Specification 4.0”. jakarta.ee. 2025年9月25日閲覧。
- ^ “Jakarta Servlet Specification 5.0”. jakarta.ee. 2025年9月25日閲覧。
- ^ “Jakarta Servlet Specification 6.0”. jakarta.ee. 2025年9月25日閲覧。
- ^ “Jakarta Servlet Specification 6.1”. jakarta.ee. 2025年9月25日閲覧。
関連項目
外部リンク
仕様
- Java Servlet 2.3 JSR-053
- Java Servlet 2.4 JSR-154 Final Release
- Java Servlet 2.5 JSR-154 Maintenance Release
- Java Servlet 3.0 JSR-315
- Java Servlet 3.1 JSR-340
- Java Servlet 4.0 JSR-363
- Jakarta Servlet 4.0
- Jakarta Servlet 5.0
- Jakarta Servlet 6.0
- Jakarta Servlet 6.1
「Java Servlet」の例文・使い方・用例・文例
固有名詞の分類
- Java_Servletのページへのリンク