JavaでJetty 9サーバを作成および設定する

1概要

この記事では、Jettyインスタンスをプログラムによって作成および構成する方法について説明します。

Jetty は、軽量で簡単に埋め込めるように設計されたHTTPサーバーおよびサーブレットコンテナーです。サーバーの1つ以上のインスタンスを設定および構成する方法について見ていきます。

2 Mavenの依存関係

はじめに、https://search.maven.org/classic/#search%7Cga%7C1%7Cg%3A%22org.eclipse.jetty%22%20AND%20a%3A%22jetty-server%22[次のMaven依存関係を持つJetty 9を 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ハンドラ

サーバーが稼働しているので、着信要求の処理方法を指示する必要があります。これは Handler インターフェースを使用して実行できます。

自分で作成することもできますが、Jettyはすでに最も一般的なユースケース用の一連の実装を提供しています。そのうちの2つを見てみましょう。

4.1. WebAppContext

WebAppContext クラスを使用すると、リクエスト処理を既存のWebアプリケーションに委任することができます。アプリケーションは、WARファイルパスまたはWebアプリケーションフォルダパスとして指定できます。

「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コネクタ

次にやりたいことは、サーバーがどのアドレスとポートをlistenするかを構成し、アイドルタイムアウトを追加することです。

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を使って組み込みサーバーを設定する方法に焦点を当てました。また、 Handlers Connectors を使ってさらに設定を行う方法を見ました。

いつものように、ここで使用されているすべてのコードはhttps://github.com/eugenp/tutorials/tree/master/libraries-server[GitHubに追加]を見つけることができます。

前の投稿:JGroupsによる信頼性の高いメッセージング
次の投稿:Mockito 2による遅延検証