我試圖實現一個異步servlet,它將接收最終用戶的請求,將它傳遞到後端服務器並獲取響應。如何修改使用異步servlet的代理響應?
到目前爲止,這聽起來像是Jetty的一個非常標準的應用程序ProxyServlet
。
現在,我的後端會用include語句(有點像Server-Side-Includes)來響應,我需要解析它,查詢後端並在最終用戶的響應流的適當位置插入。
你將如何去實現這個?我特別好奇在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();
}
}
真棒迴應!現在,如果有一種方法可以根據後端響應頭來轉換輸入,那麼我已經設置好了。 – mabi 2015-02-24 15:24:23
@mabi你需要清楚你的意思是「輸入」。如果您的意思是「一種基於服務器響應頭來轉換服務器響應內容的方式」,那麼這當然是可能的。當您創建服務器響應轉換器時,您可以獲得服務器響應(包含標頭和全部),因此您可以在轉換服務器響應內容時查看服務器響應標頭。 – sbordet 2015-02-24 17:27:29
我錯過了響應可用於變壓器的事實。是的,那就是我所追求的。保持越來越好,謝謝! – mabi 2015-02-24 21:07:52