3

アーキテクチャに関する Jetty 9 のドキュメント ( http://www.eclipse.org/jetty/documentation/current/architecture.html ) を見てきましたが、ハンドラーとコネクタの関係についてはまだ混乱しています。

  1. ハンドラを特定のコネクタにリンクできますか (リンクできる場合、どのようにしますか? コネクタには setHandler メソッドがないようです)。

  2. それとも、すべてがメイン ハンドラーに送られ、そこから配布されますか? (つまり、どのコネクタから来たのかを把握してから、別のハンドラに転送するか、自分で処理します)

どうもありがとう!

4

1 に答える 1

17

Connectors着信接続をリッスンするコンポーネントです。

Handlersすべてのリクエストを処理するために使用される低レベルの桟橋メカニズムです。

Jetty はすべての有効なリクエストを送信します (HTTP の使用方法が不適切で、 のような結果になる可能性のあるリクエストのクラスがあります400 Bad Request)。Server.getHandler()

関数固有のハンドラーには多くの種類があります。ニーズに最も適したものを選択して拡張するか、より一般化されたアプローチでハンドラーをラップします。

典型的なサーバーは、可能な動作のリストを示すために HandlerList または HandlerCollection を持つようにセットアップされます。

各ハンドラーは (順番に) ヒットし、そのハンドラーが実行したいことを決定した場合、実行できることを行います。

ハンドラーが実際に何かを生成した場合、 への呼び出しをbaseRequest.setHandled(true);使用して、現在のハンドラーの後にこれ以上ハンドラーを処理しないように Jetty に指示します。

特定のハンドラーを特定のコネクターに制限する方法については、virtualhosts メカニズムを介して行われます。

VirtualHosts は、ContextHandler特定のハンドラーに組み込まれた概念であるため、カスタム ハンドラーを でラップしてContextHandler、VirtualHosts の利点を得ることができます。

これを使用するには、 を使用してコネクタに名前Connector.setName(String)を付け@{name}ContextHandlerその特定のContextHandler.

例:

    ServerConnector httpConnector = new ServerConnector(server);
    httpConnector.setName("unsecured"); // named connector
    httpConnector.setPort(80);

    ContextHandler helloHandler = new ContextHandler();
    helloHandler.setContextPath("/hello");
    helloHandler.setHandler(new HelloHandler("Hello World"));
    helloHandler.setVirtualHosts(new String[]{"@unsecured"});
于 2014-10-01T19:39:16.383 に答える