我有一个类扩展
AbstractHandler
并重写 handle
方法,如下所示:
@Override
public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
throws IOException {
// implementation details
}
但是,我发现
AbstractHandler
在 Jetty 12 中已被弃用,并且 handle
的方法签名已更改:
@Override
public boolean handle(Request request, Response response, Callback callback) throws Exception {
}
我的问题是:
baseRequest
和 request
对象?AbstractHandler
子类移植到 Jetty 12 中工作的正确方法是什么?以下是我的处理程序正在做的事情的摘要:
HttpServletRequest
标题HttpServletResponse
标头设置 Request
标头任何将
AbstractHandler
实现从 Jetty 11 正确迁移到 Jetty 12 的帮助或示例将不胜感激!
您似乎想要的是
Handler.Abstract
或 Handler.Wrapper
。
两者都有文档
jetty-examples 项目中有一些示例,网址为
FormEndpoints
简而言之,你有一个不可变的
Request
和一个可变的 Response
。
Request
是HTTP的特殊用途Content.Source
,它处理传入请求的读取/需求行为(请务必检查这两种类型的静态方法,因为有很多方便的方法)常见任务的方法)
Response
是 HTTP 的特殊用途 Content.Sink
,它处理传出请求的写入行为(另请参阅这两种类型的静态方法)。
boolean Handler.handle(Request, Response, Callback)
方法具有以下约定。
true
表示这个Handler将要处理该请求。这意味着服务器调度将不再调用进一步的 Handler
实现。Callback
必须最终通过调用success
或failure
来完成。true
并没有完成/完成请求/响应,只有回调完成了请求/响应。如果您想针对不同的处理程序更改请求(以更改某些内容),则必须使用
Handler.Wrapper
并将传入请求包装在 Request.Wrapper
中,修改内容以满足您的需求,然后调用嵌套的处理程序。