コンテンツにスキップ
Wikipedia

Java Servlet

出典: フリー百科事典『ウィキペディア(Wikipedia)』
この記事は検証可能参考文献や出典が全く示されていないか、不十分です。 出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方)
出典検索?"Java Servlet" – ニュース · 書籍 · スカラー · CiNii · J-STAGE · NDL · dlib.jp · ジャパンサーチ · TWL
(2021年6月)

Jakarta Servlet(ジャカルタ サーブレット)とは、Eclipse Foundationが開発している、サーバ上でウェブページなどを動的に生成したりデータ処理を行うために、Javaで作成されたプログラム及びその仕様で、Jakarta EE Platformの一部。Java 8まではJava Servlet(ジャバ サーブレット)という名称で、Java Platform, Enterprise Editionの一部だった。単にServlet(サーブレット)と呼ばれることが多い。この機能を用いてショッピングサイトやオンラインバンキングなどをはじめとする多種多様な動的なWebサイトが構築されている。

概要

[編集 ]
MVCアーキテクチャにおけるServlet, JSP, JavaBeansの位置づけ

Servletはサーバサイド技術として登場した。

同様の技術(すなわち対抗技術)としてはPerlなどを用いたCGIPHPプログラムのプロセスを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) による役割付けである。

歴史

[編集 ]
Java Servletの歴史
バージョン リリース プラットフォーム 内容
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サポート
Jakarta Servletの歴史
バージョン リリース プラットフォーム 内容
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()メソッドをオーバーライドしている。

importjakarta.servlet.ServletConfig;
importjakarta.servlet.ServletException;
importjakarta.servlet.http.HttpServlet;
importjakarta.servlet.http.HttpServletRequest;
importjakarta.servlet.http.HttpServletResponse;
importjava.io.IOException;
publicclass ServletLifeCycleExampleextendsHttpServlet{
privateintcount;

@Override
publicvoidinit(ServletConfigconfig)throwsServletException{
super.init(config);
getServletContext().log("init() called");
count=0;
}

@Override
protectedvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
getServletContext().log("service() called");
count++;
response.getWriter().write("Incrementing the count: count = "+count);
}

@Override
publicvoiddestroy(){
getServletContext().log("destroy() called");
}
}

web.xml定義

[編集 ]
web.xml定義
バージョン 定義内容
2.3
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
</web-app>
2.4
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
</web-app>
2.5
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
</web-app>
3.0
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
</web-app>
3.1
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
</web-app>

脚注

[編集 ]
  1. ^ "Java Servlet 3.1の新機能――クラウド対応のJava EE 7でどう変わるのか?【Java EEエキスパート・シリーズ】". オラクル (2012年8月6日). 2014年2月23日閲覧。
  2. ^ "Jakarta Servlet Specification 4.0". jakarta.ee. 2025年9月25日閲覧。
  3. ^ "Jakarta Servlet Specification 5.0". jakarta.ee. 2025年9月25日閲覧。
  4. ^ "Jakarta Servlet Specification 6.0". jakarta.ee. 2025年9月25日閲覧。
  5. ^ "Jakarta Servlet Specification 6.1". jakarta.ee. 2025年9月25日閲覧。

関連項目

[編集 ]
ウィキブックスにJava 関連の解説書・教科書があります。

外部リンク

[編集 ]

仕様

[編集 ]
オラクル
現行
廃止
サードパーティ
Jakarta EE
その他
JVM言語
コミュニティ
カンファレンス
組織
人物

AltStyle によって変換されたページ (->オリジナル) /