ジャカルタサーブレット

原作者パヴニ・ディワンジ
開発者エクリプス財団
初回リリース1996年12月; 28年前 (1996-12)
安定版リリース
6.0 / 2022年5月31日; 3年前 (2022-05-31)
リポジトリ
  • github.com/jakartaee/サーブレット
書かれたジャワ
プラットフォームジャカルタEE
サイズ2.56MB
タイプWeb APIソフトウェアコンポーネント
ライセンスEclipseパブリックライセンス
Webサイトjakarta.ee/仕様/サーブレット/
JSPファイルの寿命

Jakarta Servlet(旧称Java Servlet)は、サーバーの機能を拡張するJava ソフトウェアコンポーネントです。サーブレットは様々な種類のリクエストに応答できますが、最も一般的にはWeb サーバー上でWeb アプリケーションをホストするためのWeb コンテナを実装するため、サーバー側サーブレットWeb APIと呼ばれます。このような Web サーブレットは、 PHPASP.NETなどの他の動的 Web コンテンツ技術のJava版です

導入

Jakarta Servletは、Jakarta EEJavaクラス[1]であり、Jakarta Servlet API [2]に準拠しています。Jakarta Servlet APIは、リクエストに応答するJavaクラスを実装するための標準です。サーブレットは原理的には任意のクライアント・サーバー・プロトコルで通信できますが、最もよく使用されるのはHTTPです。原理的にはどのサーブレットでもこのクラスを拡張できますが、現実的にはすべてのサーブレットがこのクラスを拡張します。[3]そのため、「サーブレット」は「HTTPサーブレット」の略語としてよく使用されます。[4]そのため、サーブレットはJavaプラットフォームを使用してWebサーバー動的コンテンツを追加するために使用できます[5]生成されるコンテンツは通常はHTMLですが、 XMLや、より一般的にはJSONなどの他のデータになることもありますGenericServletHttpServlet

Jakarta Servlet API は、ある程度、Web サービス用の 2 つの標準 Java テクノロジに 置き換えられました[引用が必要] 。

  • AJAX、JSON、RESTサービスに便利なJakarta RESTful Webサービス(JAX-RS 2.0
  • SOAP Web サービスに役立つ Jakarta XML Web サービス (JAX- WS )

リクエストを受け取り、そのリクエストに基づいてレスポンスを生成するオブジェクトServletです。基本パッケージは、サーブレットのリクエストとレスポンスを表すJavaオブジェクト、およびサーブレットの設定パラメータと実行環境を反映するオブジェクトを定義します。Servlet

Javaパッケージ階層に含まれるサーブレットAPIは、Webコンテナとサーブレットの予想される相互作用を定義します。[4]javax.servlet

このパッケージは、のHTTPjavax.servlet.http固有のサブクラスを定義します。このパッケージには、Web サーバーとクライアント間の複数のリクエストとレスポンスを追跡するセッション管理オブジェクトが含まれています。GenericServlet

サーブレットは、 HTTP CookieまたはURL マッピングを使用することで、複数のサーバートランザクションにわたってセッション変数の状態を保持できます[6]サーブレットを作成し、サーブレットで URL マッピングを使用する方法はいくつかあります。サーブレット 3.0 仕様 (Tomcat 7.0) より前では、web.xml を設定してサーブレットを URL にマッピングすることが唯一の選択肢でした。サーブレット 3.0 仕様以降を使用するアプリケーションでは、アノテーションを使用して任意のサーブレットを 1 つ以上の URL パターンにマッピングできます。@WebServlet

サーブレットはWebアプリケーションとしてWARファイルにパッケージ化されることがある[7]

サーブレットをデプロイして実行するには、 Webコンテナが必要です。Webコンテナ(サーブレットコンテナとも呼ばれます)は、基本的にWebサーバーのコンポーネントであり、サーブレットとやり取りします。[1] Webコンテナは、サーブレットのライフサイクル管理、URLを特定のサーブレットにマッピングする機能、そしてURLリクエスターが適切なアクセス権を持っていることを確認する機能を担います。

サーブレットは、 Jakarta Server Pages (JSP)コンパイラによって Jakarta Server Pagesから自動的に生成されます。サーブレットと JSP の違いは、サーブレットは通常 HTML を Java コード内に埋め込むのに対し、JSP は HTML 内に Java コードを埋め込むことです。一般に、JSP を使用する場合、JSP に Java コードを埋め込むことは悪い習慣とされています。[8]代わりに、バックエンドのロジックを JSP から 内の Java コードに移動することがより良い方法ですServlet[8]これにより、 はServlet処理のみを担当し、JSP は HTML の表示のみを担当することになり、[8]明確な関心の分離単一責任の原則への準拠が可能になります。

HTML を生成するためにサーブレットを直接使用すること (以下の例を参照) はまれになっていますが、Jakarta EE の高レベル MVC Web フレームワーク ( Faces ) では、 を介した低レベルの要求/応答処理にサーブレット テクノロジを依然として明示的に使用していますFacesServlet

やや古い使用法としては、「モデル 2 」と呼ばれるパターンでサーブレットを JSP と組み合わせて使用​​するものがあります。これは、モデル - ビュー - コントローラの一種です

歴史

JavaサーブレットAPIは、1996年5月に開催された第1回JavaOneカンファレンスで初めて公開されました。 [9] [10]カンファレンスでの発表から約2か月後、最初の公開実装がJavaSoftのウェブサイトで公開されました。これはJava Web Server(JWS、当時のコードネームはJeevesの最初のアルファ版であり、[11]最終的に1997年6月5日に製品として出荷されました。[12]

java.netのブログで、SunのベテランでGlassFishのリーダーであるJim Driscollがサーブレット技術の歴史を詳しく説明しています。[13] James GoslingはJavaの初期の頃にサーブレットについて初めて考えましたが、その概念が製品化されるのは1996年12月にSunがJWSを出荷したときでした。[14] [15] [16]これは、現在のJakarta EEが仕様化される前のことでした。

Servlet1仕様は、サン・マイクロシステムズに勤務していたパヴニ・ディワンジ氏[17] [18]によって作成され、バージョン1.0は1997年6月に完成しました。バージョン2.2からは、 Javaコミュニティプロセスの下で仕様が開発されました

サーブレットAPIの歴史
サーブレットAPIバージョンリリース仕様プラットフォーム重要な変更点
ジャカルタサーブレット6.02022年5月31日6.0ジャカルタ EE 10廃止された機能を削除し、要求された機能強化を実装する
ジャカルタサーブレット5.02020年10月9日5.0ジャカルタ EE 9APIをパッケージからjavax.servlet移動jakarta.servlet
ジャカルタサーブレット4.0.32019年9月10日4.0ジャカルタ EE 8「Java」商標から改名
Javaサーブレット4.02017年9月JSR 369Java EE 8HTTP/2
Javaサーブレット3.12013年5月JSR 340Java EE 7ノンブロッキングI/O、HTTPプロトコルアップグレードメカニズム(WebSocket[19]
Javaサーブレット3.02009年12月JSR 315Java EE 6プラグイン性、開発の容易さ、非同期サーブレット、セキュリティ、ファイルのアップロード
Javaサーブレット2.52005年9月JSR 154Java EE 5Java SE 5が必要、アノテーションをサポート
Javaサーブレット2.42003年11月JSR 154J2EE 1.4web.xmlはXMLスキーマを使用する
Javaサーブレット2.32001年8月JSR 53J2EE 1.3の追加Filter
Javaサーブレット2.21999年8月JSR 902、JSR 903J2EE 1.2J2EE の一部となり、.war ファイルに独立した Web アプリケーションを導入しました。
Javaサーブレット2.11998年11月2.1a未指定最初の公式仕様、追加RequestDispatcherServletContext
Javaサーブレット2.01997年12月JDK 1.11998年4月のJavaサーブレット開発キット2.0の一部[20]
Javaサーブレット1.01996年12月1997年6月のJavaサーブレット開発キット(JSDK)1.0の一部[14]

サーブレットのライフサイクル

サーブレットのライフサイクルの中心となるのは、、、の3つのメソッドです。これらはinit()すべてservice()destroy()サーブレットに実装されており、特定のタイミングでサーバーによって呼び出されます。

  • サーブレットライフサイクルの初期化段階では、Webコンテナはinit()メソッド[21]を呼び出してサーブレットインスタンスを初期化します。このメソッドには、javax.servlet.ServletConfigインターフェースを実装したオブジェクトが渡されます。この設定オブジェクトにより、サーブレットはWebアプリケーションから名前と値の初期化パラメータにアクセスできるようになります。
  • 初期化後、サーブレットインスタンスはクライアントからのリクエストを処理できるようになります。各リクエストはそれぞれ独立したスレッドで処理されます。Webコンテナは、service()リクエストごとにサーブレットのメソッドを呼び出します。service()メソッドはリクエストの種類を判別し、適切なメソッドにディスパッチしてリクエストを処理します。サーブレットの開発者は、これらのメソッドの実装を提供する必要があります。サーブレットに実装されていないメソッドへのリクエストが行われた場合、親クラスのメソッドが呼び出され、通常はリクエスト元にエラーが返されます。
  • 最後に、Webコンテナはdestroy()サーブレットをサービスから外すメソッドを呼び出します。このdestroy()メソッドは、 と同様にinit()、サーブレットのライフサイクル中に一度だけ呼び出されます。

以下は、これらの方法の一般的なユーザー シナリオです。

  1. ユーザーがURLへのアクセスを要求したとします。
    • ブラウザはこの URL に対する HTTP リクエストを生成します。
    • このリクエストは適切なサーバーに送信されます。
  2. HTTP リクエストは Web サーバーによって受信され、サーブレット コンテナーに転送されます。
    • コンテナはこのリクエストを特定のサーブレットにマップします。
    • サーブレットは動的に取得され、コンテナのアドレス空間にロードされます。
  3. コンテナはinit()サーブレットのメソッドを呼び出します。
    • このメソッドは、サーブレットが最初にメモリにロードされたときにのみ呼び出されます。
    • サーブレットに初期化パラメータを渡して、サーブレット自身を構成できるようにすることも可能です。
  4. コンテナはservice()サーブレットのメソッドを呼び出します。
    • このメソッドは、HTTP リクエストを処理するために呼び出されます。
    • サーブレットは、HTTP リクエストで提供されたデータを読み取る場合があります。
    • サーブレットはクライアントに対する HTTP 応答を作成することもできます。
  5. サーブレットはコンテナのアドレス空間に残り、クライアントから受信した他の HTTP 要求を処理するために使用できます。
    • このservice()メソッドは、HTTP リクエストごとに呼び出されます。
  6. コンテナは、ある時点で、サーブレットをメモリからアンロードすることを決定する場合があります。
    • この決定を行うアルゴリズムは、コンテナごとに固有です。
  7. コンテナはサーブレットのdestroy()メソッドを呼び出して、サーブレットに割り当てられているファイル ハンドルなどのリソースを解放します。重要なデータは永続ストアに保存される場合があります。
  8. サーブレットとそのオブジェクトに割り当てられたメモリは、ガベージ コレクションの対象になります。

次のサンプルサーブレットは、そのメソッドが呼び出された回数を出力しますservice()

は、インターフェースの実装HttpServletである のサブクラスであることに注意してくださいGenericServletServlet

service()クラスのメソッドはHTTPリクエストに応じて、、、、などHttpServletメソッドにリクエストをディスパッチします。以下の例では、メソッドがオーバーライドされており、どのHTTPリクエストメソッドに対応するか区別されていません。doGet()doPost()doPut()doDelete()service()

java.io.IOExceptionをインポートします jakarta.servlet.ServletConfigをインポートします。jakarta.servlet.ServletExceptionインポートします。jakarta.servlet.http.HttpServletインポートします。jakarta.servlet.http.HttpServletRequestインポートします。jakarta.servlet.http.HttpServletResponseインポートします     パブリッククラスServletLifeCycleExampleはHttpServletを拡張します{プライベートInteger sharedCounter ;         @Override public void init ( final ServletConfig config ) throws ServletException { super . init ( config ); getServletContext (). log ( "init() called" ); sharedCounter = 0 ; }               @Override protected void service ( final HttpServletRequest request , final HttpServletResponse response ) throws ServletException , IOException { getServletContext (). log ( "service() called" ); int localCounter ; synchronized ( sharedCounter ) { sharedCounter ++ ; localCounter = sharedCounter ; } response . getWriter (). write ( "Incrementing the count to " + localCounter ); // ローカル変数にアクセスresponse . getWriter (). flush (); // レスポンスをフラッシュ}                               @Override public void destroy () { getServletContext (). log ( "destroy() が呼び出されました" ); } }      

コンテナサーバー

サーブレット技術の仕様は多くの製品に実装されています。実装の一覧については、Webコンテナのページをご覧ください。

SailFinなどの SIP サーブレット用の他のタイプのサーブレット コンテナーもあります

参照

引用

  1. ^ ab Murach & Urban 2014、pp. 170–171、§2 基本的なサーブレットと JSP のスキル - 展望 - 要約。
  2. ^ 「サーブレット(Java(TM) EE 7仕様API)」。ora​​cle.com 2018年7月25日閲覧。
  3. ^ Murach & Urban 2014、pp. 128–129、§2 サーブレットと JSP の基本スキル - サーブレットを作成してマップする方法。
  4. ^ ab 「サーブレットの基本 - 第1章」。novocode.com。2017年12月18日時点のオリジナルよりアーカイブ。
  5. ^ Murach & Urban 2014、pp. 40–42、§1 正しく始めよう - バックエンド処理用のサーブレット。
  6. ^ Murach & Urban 2014、p. 87、§2 基本的なサーブレットと JSP のスキル。
  7. ^ Murach & Urban 2014、p. 74、§1 正しい始め方 - Web アプリケーションを操作するためのその他のスキル。
  8. ^ abc Murach & Urban 2014、pp. 46–47、§1 正しく始めましょう - 2 ページ目の JSP。
  9. ^ Freedman, Matt (1996年6月26日). 「JavaOneカンファレンスレポート」. JavaWorld . 2018年7月26日時点のオリジナルよりアーカイブ。 2018年7月25日閲覧
  10. ^ Diwanji, Pavani; Connelly, Dave; Wagle, Prasad (1996年5月29日). 「Java Server and Servlets」(PDF) . Servers and Server Extensions . JavaOne 1996. 2000年8月16日時点のオリジナルよりアーカイブ(PDF) . 2020年2月1日閲覧
  11. ^ Chang, Phil Inje (1997年7月1日). 「インタビュー:Java Web Serverチームが語る、その秘密」. JavaWorld . 2018年7月26日時点のオリジナルよりアーカイブ。 2018年7月25日閲覧
  12. ^ Chang, Phil Inje (1997年6月1日). 「Java Web Serverが出荷されました!」JavaWorld . 2018年7月26日時点のオリジナルよりアーカイブ。 2018年7月25日閲覧
  13. ^ “Servlet History | community.oracle.com”. Weblogs.java.net. 2005年12月10日. 2020年8月15日時点のオリジナルよりアーカイブ。 2013年6月14日閲覧
  14. ^ ab Hunter, Jason (2000年3月). 「サーブレットタイムライン」. Javaサーブレットプログラミングを超えて. O'Reilly Conference on Java. O'Reilly Media – SlidePlayer.com経由.
  15. ^ “Java Web Server”. Javasoft . Sun Microsystems . 1998年1月11日時点のオリジナルよりアーカイブ。 2020年2月1日閲覧
  16. ^ “Java Web Server(tm)”. Sun Microsystems . 2002年2月6日時点のオリジナルよりアーカイブ。 2020年2月1日閲覧
  17. ^ “Pavni Diwanji”. Family Online Safety Institute . 2018年7月26日時点のオリジナルよりアーカイブ2016年11月12日閲覧。
  18. ^ 米国特許5928323、ゴスリング、ジェームズ・A.、ディワンジ、パヴニ、コネリー、デビッド・W.、「サーバサイドソフトウェアオブジェクトを用いて情報を動的に生成する装置および方法」、1999年7月27日公開、1999年7月27日発行、サン・マイクロシステムズに譲渡 
  19. ^ 「サーブレット3.1の新機能 - Java EE 7の今後の展望(Arun Gupta、マイルズ・トゥ・ゴー…)」。ora​​cle.com 。 2016年11月22日閲覧
  20. ^ ウィリアム・クロフォード、ジェイソン・ハンター(1998年11月)「序文」『Javaサーブレットプログラミング』(第1版)オライリー・メディア、p. ix–x. ISBN 978-1-56592-391-1ここでは、1997 年 12 月に Java Web Server 1.1 の一部として導入され、1998 年 4 月に Java Servlet Development Kit 2.0 のリリースによって明確化された Servlet API バージョン 2.0 について説明します
  21. ^ Murach & Urban 2014、pp. 160–163、§15 サーブレットの開発方法 - サーブレットを操作するためのその他のスキル。

参考文献

チュートリアル

  • Jakarta EE 10 を使ったサーブレットの始め方 | Jakarta EE | The Eclipse Foundation
  • Jakarta Servlet、Jakarta Faces、Jakarta Server Pages の説明 |ジャカルタEE |エクリプス財団
  • Jakarta サーブレット :: Jakarta EE チュートリアル :: Jakarta EE ドキュメント
  • 公式サイト
  • Servlets.com 2018年7月25日アーカイブWayback Machine
Retrieved from "https://en.wikipedia.org/w/index.php?title=Jakarta_Servlet&oldid=1285326567"