2016-08-27 11 views
0

Я пытаюсь построить сервер api на Jetty.Jetty: Как вставить HandlerWrapper, HandlerList и ContextHandlerCollection и ContextHandler

Я хочу иметь несколько APIs на маршрутах, которые выглядят как/APIs/api1/конечная точка,/APIs/API2/конечная точка,/APIs/api3/конечной точки, и т.д.

По существу у меня есть HandlerWrapper, который содержит HandlerList из ContextHandlerCollections, что по сути дела просто делает:

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 не нашел, но я вижу в журналах заявление «Это это запрос api ».

Любые подсказки?

Я в основном хочу один ContextHandlerCollection для каждого api1, api2 и т. Д. И ContextHandlerCollection должен состоять из набора специальных обработчиков, предназначенных для конечных точек.

Что мне не хватает?

Cheers,

ответ

3

Handler - базовая форма обработки запроса, его не конечный пункт для обработки запроса, если вы звоните request.setHandled(true)

HandlerWrapper - обработчик, который может выполнить некоторую обработку и решить, если это должен передать запрос вложенному (завернутому) обработчику.

HandlerCollection - сборник обработчиков, следуя стандартным правилам сбора java относительно порядка выполнения. Каждый обработчик в коллекции выполняется до тех пор один из них не вызывает request.setHandled(true)

HandlerList - специализированный HandlerCollection, который следует java.util.List порядок выполнения дочерних Обработчиков

ContextHandler - специализированный HandlerWrapper, что только выполняет свою завернутую Handler если совпадают контекст-путь запроса и виртуальные хосты.

ContextHandlerCollection - это HashMap из ContextHandler, который будет выполнять только те дочерние обработчики (в коллекции), который имеет совпадение с запросом контекстного пути (и виртуальных хостов)

+0

Это было, конечно, в правильном направлении. В итоге я просто придумал свой собственный обработчик, так как это было проще, чем обыскать документацию: P –

 Смежные вопросы

  • Нет связанных вопросов^_^