Java Servlet
Jakarta Servlet(ジャカルタ サーブレット)とは、Eclipse Foundationが開発している、サーバ上でウェブページなどを動的に生…
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
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.