【发布时间】:2015-02-24 11:05:13
【问题描述】:
我正在尝试实现一个异步 servlet,它将接收最终用户的请求,将其传递给后端服务器并获取响应。
到目前为止,这听起来像是 Jetty 的 ProxyServlet 的一个非常标准的应用程序。
现在,变化在于我的后端将使用包含语句(有点像服务器端包含)进行响应,我需要对其进行解析、查询后端并插入到最终用户响应流中的适当位置。
您将如何实施?我对在 onResponseContent 回调期间解析和触发中间请求特别好奇,我知道它可能包含也可能不包含完整响应(因此可能只包含部分 include 语句)。
为了说明,这是我目前拥有的:
@WebServlet(name = "MyServlet",
urlPatterns = {"/my/outbounduri/*"},
initParams = {
@WebInitParam(name = "proxyTo", value = "/servlet/backend")
}
)
public class MyHandler extends ProxyServlet {
@Override
protected void customizeProxyRequest(HttpServletRequest srequest,
HttpServletResponse sresponse ) {
// add custom headers for the backend
}
@Override
protected void onResponseContent(HttpServletRequest request,
HttpServletResponse response, Response proxyResponse,
byte[] buffer, int offset, int length, Callback callback) {
try {
// instead of passing the content on, we need to catch
// include statements
// response.getOutputStream().write(buffer, offset, length);
callback.succeeded();
} catch (Throwable x) {
callback.failed(x);
}
}
@Override
protected void onResponseSuccess(HttpServletRequest request,
HttpServletResponse response, Response proxyResponse) {
AsyncContext asyncContext = request.getAsyncContext();
asyncContext.complete();
}
}
【问题讨论】:
标签: asynchronous jetty servlet-3.0 ssi