1

我有一个 Servlet 过滤器,它在过滤器链之前和之后执行操作,例如:

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain){
    // I do some stuff here...

    chain.doFilter(req, res);

    // ... and then I do some more stuff here.
}

我正在将其转换为 Ratpack 应用程序,并已弄清楚如何将处理程序用作过滤器(通常)

class MyHandler implements Handler {
    void handle(Context ctx){
        // so some stuff...

        context.next()
    }
}

但是调用next()是非阻塞的,因此后续操作会立即执行,而不是在其他处理程序执行后执行。

如何在 Ratpack 中的代码行为之前和之后得到这个?

4

1 回答 1

4

根据您的“之后”逻辑正在做什么以及您是否已经在“之后”逻辑之前呈现响应,您可以使用 context.onClose()

class MyHandler implements Handler {
    void handle(Context ctx){
        // so some stuff...

        context.onClose(requestOutcome -> {
            // do some more stuff...
        })

        context.next()
    }
}   
于 2015-10-02T18:02:00.663 回答