マジセミドライブ
ウェビナー関連のニュースやITサービス&ツールの最新情報を随時配信します。
OSS情報
2020.01.01
【OSS情報アーカイブ】Jetty


※当記事に記載されている情報は、古くなっている場合があります。オフィシャルサイトで最新情報をご確認ください。
コンテンツ
「Jetty」とは
概要
Jetty(ジェッティ)とは、JavaベースのWebサーバサーブレットコンテナです。
静的および動的コンテンツを提供する「HTTPサーバ機能」およびJavaサーブレットを動作させる「サーブレットコンテナ機能」を提供します。
「軽量動作」「高スケーラビリティ」「完全非同期処理」「コンポーネント指向」などの特徴があります。
基本説明
Jetty(Eclipse Jetty)は「HTTPサーバ」「HTTPクライアント」「javax.servletコンテナ」を提供するオープンソースプロジェクトです。
「スタンドアロン」または「組み込みインスタンス化」で利用でき、多くのオープンソースプロダクトで組込み用途としても利用されています。
Jettyプロジェクトは『使いやすさと長年のサーブレット開発との互換性を維持しながら最大のパフォーマンスを提供するWebプロトコルを大容量の低遅延でサポートすること』および『Webアプリケーションのデプロイメントのための堅実な伝統的ディストリビューション』を目標としています。
主要開発元
JettyはEclipse Foundationの一環としてフリーでオープンソースのプロジェクトとして開発されています。
→Jetty →doc →Chapter 35. Contributing to Jetty
経緯
1995年
Jettyの初版がリリースされました。Tomcatよりも長い歴史を持ちます。
2009年から
Jettyプロジェクトは、開発プロセスを改善し、プロジェクトのライセンスとコミュニティを拡大するために、Eclipse Foundationにコアコンポーネントを移行しました。
その後、「Jetty 9」からプロジェクトはEclipse Foundationに完全に移行しています。
オフィシャルサイト情報
■オフィシャルサイト
■ライセンス情報
Jettyのライセンスは「デュアルライセンス(Apache License 2.0+Eclipse Public License 1.0)」です。
詳細について、こちらを参照ください。
→Jetty →Licence
■ダウンロード
→Jetty →Eclipse Jetty Downloads
■導入事例
Eclipse Jetty Powered製品は、Jettyの多様性とそのコミュニティの多様性を示しています。
同様製品
同様な機能を提供する製品として、次のようなものがあります。
オープンソース製品:「Apache Tomcat」「GlassFish」「WildFly」など。
Java EE実装
Jettyは「Java EE仕様」を実装しており、主にサーブレット仕様の側面を実装しています。
Java EEプラットフォームの最近のリリースでは、多くの開発者がJava EEの傘下にある多くのテクノロジのサブセットしか必要としないことを認識して、Webプロファイルが導入されました。
Jetty自体はすべてのWebプロファイルテクノロジに対応できるわけではありませんが、Jettyアーキテクチャではサードパーティの実装をプラグインしてニーズに合わせてカスタマイズされたコンテナを作成できます。
→Jetty →doc →Chapter 1. Introducing Jetty →Jetty and Java EE Web Profile
対応プロトコル
・HTTP/1.1—RFC 7230
・HTTP/2—RFC 7540
・WebSocket—RFC 6455、JSR 356
・FastCGI
・OSGi
・JMX
・JNDI
・JAAS など
組込み用途
Jettyは、効率的に組み込めることを意図して開発されており、コンポーネント指向技術としての長い歴史を持ちます。
フットプリント(メモリ専有容量)が小さいため、さまざまな対象に対して組み込み型Webサービスを提供するのに適しています。
・アプリケーションサーバ
・Javaアプリケーション
・各種ツール
・各種フレームワーク
・大規模クラスタ
・デバイス類 など
「Jetty」の高スループット性能
Jettyは各種高速化技術を搭載することで、高スループット性能を実現しています。
非同期サーバ
Jettyでは、非同期サーブレット+非同期HTTPサーバとして、クライアントからのリクエストに対し、待機が非同期に行われるため、スケーラビリティとサービス品質が大幅に向上します。
非同期HTTPクライアント
Jettyは、非同期HTTPクライアントとして、自身から外部のサーバに向けて、HTTPリクエストを非同期に送受信できます。
「HTTP/2プロトコル」サポート
Jettyは、RFC 7540で定義されている「HTTP/2プロトコル」のクライアントとサーバの両方の実装をサポートしています。
「HTTPヘッダ圧縮」「HTTP/2サーバプッシュ通信」「HTTPパイプライン」などの仕組みにより従来プロトコルよりも高速な通信が可能です。
→Jetty →doc →Part III. Jetty Administration Guide →Chapter 16. HTTP/2
「FastCGI」サポート
■「FastCGI」とは
概要
「FastCGI」は、Webサーバと通信するために使用されるネットワークプロトコルです。
FastCGIサーバは、動的Web言語(PHP、Python、Ruby、Perlなど)によって生成されたWebコンテンツの配信にも使用されます。
FastCGIをサポートするWebサーバとして、「Apache」「Nginx」「Jetty」などがあります。
基本的な仕組み
①Webサーバはプロキシとして機能し、クライアント(ブラウザ)から受信したHTTP要求をFastCGIサーバに転送されるFastCGI要求に変換して、FastCGIサーバに渡します。
②FastCGIサーバは、動的Web言語インタプリタを起動します。
③動的Web言語インタプリタは、FastCGI要求に含まれる情報からWebコンテンツ(HTML)を生成します。
④FastCGIサーバは、作成されたWebコンテンツをWebサーバに返されるFastCGI応答にフォーマットして、Webサーバに渡します。
⑤WebサーバはFastCGI応答をHTTP応答に変換してからクライアントに返します。
■Jettyでの「FastCGI」構成
Jettyは、FastCGIをサポートするWebサーバとして機能するように構成できます。
これによりユーザーは「HTTP/2などのJetty機能」「JettyがHTTP/2プッシュに対して提供する独自のサポート」「Jettyのスケーラビリティ」「サーブレット」「JSPなどのJava Web標準に対するJettyのネイティブサポート」などを利用できます。
HTTP/2対応のクライアントからのHTTP/2要求を待ち受け、それらをFastCGI要求としてFastCGIサーバに転送する場合は、http2モジュールを有効にする必要があります。
→Jetty →doc →Part III. Jetty Administration Guide →Chapter 17. FastCGI Support
「Jetty」のMavenプラグイン
「Apache Maven」とは
■概要
Apache Mavenは、Java用プロジェクト管理ツールです。
Apacheライセンスにて配布されているオープンソースソフトウェアとして利用できます。
Apache Mavenはソフトウェアプロジェクト管理ツールとして、プロジェクトオブジェクトモデル(POM)の概念に基づいて、リポジトリからプロジェクトの「ビルド」「レポート作成」「ドキュメント管理」などを実施できます。
■主な機能
プラグイン拡張によりさまざまな機能を利用できます。
・プロジェクトサイト生成
・ソースコードのコンパイル
・テスト
・テストレポート生成
・Javadoc生成
・JAR生成
・WAR/EARファイル生成
・サーバへのデプロイ など
→OSSxCloudNews →オープンソースの運用管理・運用自動化/Apache Mavenとは
「Jetty Mavenプラグイン」による開発効率化
概要
Jetty Mavenプラグインを利用することで、Webアプリケーション開発プロジェクトを効率化でき、開発時間を節約できます。
自動デプロイ
Mavenのデフォルトに従って構造化されているWebアプリケーションプロジェクトを追加できます。
プラグインは定期的にプロジェクトの変更をスキャンして変更がないかどうかを確認し、発見した場合は、自動的にWebアプリケーションを再デプロイします。
IDEを使用してプロジェクトに変更を加えると、実行中のWebコンテナによって自動的に変更が行われ、すぐにテストできるようになります。
→Jetty →doc →Chapter 23. Maven and Jetty →Configuring the Jetty Maven Plugin
プロダクション環境非推奨
Jettyプロジェクトでは、Jetty Mavenプラグインのプロダクション環境での使用を推奨していません。
Jetty Mavenプラグインは開発に非常に役立ちますが、プラグインが機能するためには、多くの内部Maven APIとMaven自体を活用する必要があります。
そのため、Jettyプロジェクトでは、「伝統的なディストリビューション配備アプローチ」もしくは「組み込みJetty」の使用を推奨しています。
「Jetty」のアーキテクチャ
コネクタおよびハンドラの調整
Jettyサーバは、「接続を受け付けるコネクタの集まり」と「接続からのリクエストを処理してレスポンスを生成するハンドラの集まり」との間の配管部分として機能するもので、スレッドプールからのスレッドが処理を実行します。
サーブレットAPI
Jettyの要求/応答はサーブレットAPIから派生していますが、サーブレットAPIの全機能は適切なハンドラを設定した場合にのみ利用可能です。
リクエストのセッションAPIはリクエストが渡されない限り非アクティブセッションハンドラです。
サーブレットなしのJettyサーバ構築
サーブレット自体の概念は、サーブレットハンドラによって実装されています。
サーブレットが必要ない場合は、サーブレット要求/応答APIの使用によるオーバーヘッドはほとんどありません。
したがって、サーブレットを使用せずに、コネクタとハンドラのみを使用してJettyサーバを構築できます。
さまざまなコンポーネント構成を実現
Jettyは「コネクタとハンドラのツリー構築」および「個々の設定」に関する機能を提供します。
Jettyコンポーネントは単純なPOJO(Plain Old Java Object)であるため、さまざまな方法でコンポーネント構成を実現できます。
参考元サイト
- eclipse.org →jetty
- GitHub →eclipse/jetty.project
- Wikipedia →Jetty (web server)
- apache.org →maven
- Wikipedia →Apache Maven
※定期的にメンテナンスを実施しておりますが、一部情報が古い場合がございます。ご了承ください。
この記事のタグ一覧
フリーワード検索
カテゴリー一覧
アクセスランキング
- 🏆ランク1位🏆
【無料で使える】「 OCR 」ツールまとめ - 🏆ランク2位🏆
【無料で使える】「 プロジェクト管理 」ツールまとめ - 🏆ランク3位🏆
【無料で使える】「 グループウェア 」まとめ - 🏆ランク4位🏆
【無料で使える】「 翻訳 」ツールまとめ - 🏆ランク5位🏆
【AIツール実験室】画像生成AIツール「 Emi 」(前編) - 🏆ランク6位🏆
【OSS情報】Python用ASGI Webサーバ実装「 Uvicorn 」 - 🏆ランク7位🏆
【OSS情報アーカイブ】SonarQube - 🏆ランク8位🏆
【ツール紹介】無料オープンソース「 ビデオ監視 ツール 」まとめ3選 - 🏆ランク9位🏆
【無料で使える】「 ドキュメント管理 」ツールまとめ - 🏆ランク10位🏆
【無料で使える】「 マルウェア 」対策ツールまとめ