将 AbstractHandler 实现从 Jetty 11 移植到 Jetty 12

问题描述 投票:0回答:1

我有一个类扩展

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 {
    
}

我的问题是:

  • 如何访问 Jetty 11 实现中依赖的
    baseRequest
    request
    对象?
  • 将我的
    AbstractHandler
    子类移植到 Jetty 12 中工作的正确方法是什么?

以下是我的处理程序正在做的事情的摘要:

  • 检查
    HttpServletRequest
    标题
  • 根据
    HttpServletResponse
    标头设置
    Request
    标头

任何将

AbstractHandler
实现从 Jetty 11 正确迁移到 Jetty 12 的帮助或示例将不胜感激!

java jetty jetty-12
1个回答
0
投票

您似乎想要的是

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
中,修改内容以满足您的需求,然后调用嵌套的处理程序。

© www.soinside.com 2019 - 2024. All rights reserved.