JavaでのJetty9サーバーの作成と構成
1. 概要
この記事では、Jettyインスタンスをプログラムで作成および構成する方法について説明します。
Jetty は、軽量で簡単に埋め込むことができるように設計されたHTTPサーバーおよびサーブレットコンテナです。 サーバーの1つ以上のインスタンスをセットアップおよび構成する方法を見ていきます。
2. Mavenの依存関係
まず、次のMaven依存関係を持つJetty9をpom.xmlに追加します。
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>9.4.8.v20171121</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-webapp</artifactId>
<version>9.4.8.v20171121</version>
</dependency>
3. 基本サーバーの作成
Jettyを使用して組み込みサーバーを起動するのは、次のように書くのと同じくらい簡単です。
Server server = new Server();
server.start();
シャットダウンも同様に簡単です。
server.stop();
4. ハンドラー
サーバーが稼働しているので、着信要求をどう処理するかをサーバーに指示する必要があります。 これは、ハンドラーインターフェースを使用して実行できます。
自分で作成することもできますが、Jettyはすでに最も一般的なユースケースの実装セットを提供しています。 それらのうちの2つを見てみましょう。
4.1. WebAppContext
WebAppContext クラスを使用すると、リクエスト処理を既存のWebアプリケーションに委任できます。 アプリケーションは、WARファイルパスまたはwebappフォルダーパスのいずれかとして提供できます。
「myApp」コンテキストでアプリケーションを公開する場合は、次のように記述します。
Handler webAppHandler = new WebAppContext(webAppPath, "/myApp");
server.setHandler(webAppHandler);
4.2. HandlerCollection
複雑なアプリケーションの場合、HandlerCollectionクラスを使用して複数のハンドラーを指定することもできます。
2つのカスタムハンドラーを実装したとします。 1つ目はロギング操作のみを実行し、2つ目は実際の応答を作成してユーザーに送り返します。 それぞれの着信リクエストを両方ともこの順序で処理します。
方法は次のとおりです。
Handler handlers = new HandlerCollection();
handlers.addHandler(loggingRequestHandler);
handlers.addHandler(customRequestHandler);
server.setHandler(handlers);
5. コネクタ
次に実行したいのは、サーバーがリッスンするアドレスとポートを構成し、アイドルタイムアウトを追加することです。
Server クラスは、特定のポートまたはアドレスにバインドするために使用できる2つの便利なコンストラクターを宣言します。
小さなアプリケーションを扱う場合はこれで問題ないかもしれませんが、異なるソケットで複数の接続を開きたい場合は十分ではありません。
この状況では、Jettyは Connector インターフェース、より具体的には ServerConnector クラスを提供し、さまざまな接続構成パラメーターを定義できるようにします。
ServerConnector connector = new ServerConnector(server);
connector.setPort(80);
connector.setHost("169.20.45.12");
connector.setIdleTimeout(30000);
server.addConnector(connector);
この構成では、サーバーは169.20.45.12:80でリッスンします。 このアドレスで確立された各接続には、30秒のタイムアウトがあります。
他のソケットを構成する必要がある場合は、他のコネクタを追加できます。
6. 結論
このクイックチュートリアルでは、Jettyを使用して組み込みサーバーをセットアップする方法に焦点を当てました。 また、ハンドラーおよびコネクターを使用してさらに構成を実行する方法も確認しました。
いつものように、ここで使用されるすべてのコードは、GitHubのにあります。