JavaでのJetty 9サーバーの作成と構成
1. 概要
この記事では、Jettyインスタンスをプログラムで作成および構成する方法について説明します。
Jettyは、軽量で簡単に埋め込むことができるように設計されたHTTPサーバーおよびサーブレットコンテナです。 サーバーの1つ以上のインスタンスをセットアップおよび構成する方法を見ていきます。
2. Mavenの依存関係
まず、add Jetty 9 with the following Maven dependenciesをpom.xmlに入れます。
org.eclipse.jetty
jetty-server
9.4.8.v20171121
org.eclipse.jetty
jetty-webapp
9.4.8.v20171121
3. 基本サーバーの作成
Jettyを使用して組み込みサーバーを起動するのは、書くのと同じくらい簡単です。
Server server = new Server();
server.start();
シャットダウンも同様に簡単です。
server.stop();
4. ハンドラー
サーバーが稼働しているので、着信リクエストをどうするかを指示する必要があります。 これは、Handlerインターフェイスを使用して実行できます。
自分で作成することもできますが、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で組み込みサーバーをセットアップする方法に焦点を当てました。 また、HandlersとConnectorsを使用してさらに構成を実行する方法も確認しました。
いつものように、ここで使用されるすべてのコードはover on GitHubで見つけることができます。