2016-08-27 11 views
0

私はJettyにapiサーバーを構築しようとしています。Jetty:HandlerWrapper、HandlerList、ContextHandlerCollection、ContextHandlerをネストする方法

私はAが含まれている、基本的に私はHandlerWrapperを持っているなど

、/ APIを/ API1 /エンドポイント、/ APIを/ API2 /エンドポイント、/ APIを/ API3 /エンドポイントのように見えるのルート上に複数のAPIを持つようにしたいです

public void handle(...) { 
    if (uri.startsWith("/apis/")) { 
     log.info("This is an api request"); 
     this.getHandlerList.handle(...) 
    } else { 
     super.handle() 
    } 
} 

private HandlerList getHandlerList() { 
    HandlerList handlerList = new HandlerList(); 
    ContextHandlerCollection contextHandlerCollection = new ContextHandlerCollection(); 
    ContextHandler api1 = new ContextHandler("/apis/api1/endpoint"); 
    api1.setHandler(new Api1Handler()); 
    contextHandlerCollection.addHandler(api1); 
    handlerList.addHandler(contextHandlerCollection); 
    return handlerList 
} 

を今私が何しようとすると::

curl localhost:port/apis/api1/endpoint 

私が見つからない404を取得するが、私はログに声明を参照してください「この本質的にちょうどないことContextHandlerCollectionsのHandlerList apiリクエストです "。

ヒント

私は基本的に、各api1、api2などに対して1つのContextHandlerCollectionを必要とします。そして、ContextHandlerCollectionは、エンドポイント固有のハンドラのセットから選択する必要があります。

私には何が欠けていますか?

乾杯、

答えて

3

Handler - 要求を処理するの塩基形態、要求処理のためにそのない終点あなたがrequest.setHandled(true)

HandlerWrapper呼び出さない限り - いくつかの処理を実行し、それかどうかを判断することができますハンドラネストされた(ラップされた)ハンドラにリクエストを渡す必要があります。

HandlerCollection - 実行順序に関する標準的なJavaコレクションルールに従ったハンドラのコレクション。

ContextHandler子ハンドラの実行のjava.util.Listの順序を、以下の専門HandlerCollection - - だけでそのラップハンドラを実行し、専門HandlerWrapperそのうちの一つがrequest.setHandled(true)

HandlerListを呼び出すまで、コレクション内の各ハンドラが実行されます要求コンテキストパスと仮想ホストが一致する場合

ContextHandlerCollection - これが正しい方向に確かだった要求コンテキスト・パス(および仮想ホスト)に一致するものを持っている(コレクション内)のみの子ハンドラを実行しますContextHandlerのHashMapの

+0

。ドキュメントを捜すよりも簡単だったので、私は自分のハンドラを用意するだけでした:P –

関連する問題