Jetty RequestLog - 发出阅读请求正文

时间:2016-11-01 10:33:44

标签: java logging jetty httprequest

我使用Jetty,我想记录请求的参数和正文。

将AccessLogger添加到处理程序:

    ServletContextHandler servletContextHandler = new ServletContextHandler();
    ...

    RequestLogHandler requestLogHandler = new RequestLogHandler();
    requestLogHandler.setRequestLog(new AccessLogger());

    HandlerCollection handlers = new HandlerCollection();
    handlers.setHandlers(new Handler[]{
            servletContextHandler,
            requestLogHandler
    });

AccessLogger实现了RequstLog接口:

@Override
public void log(Request request, Response response) {
    request.getReader();
}

问题在于,当我尝试运行request.getReader()时,它会显示IllegalStateException: STREAMED。我认为那是因为前一个处理程序已经读取了所有数据。但是我怎么能按照我需要的方式记录呢?

1 个答案:

答案 0 :(得分:0)

标准Servlet行为。

如果您的Servlet读取请求正文(通过getInputStream()getReader()),那么您已阅读它,无法再次阅读。

使用的技术getReader()getInputStream()是如何呈现身体内容,并且无法更改。

  • 如果您使用getReader(),则以后无法使用getInputStream()
  • 如果您使用getInputStream(),则以后无法使用getReader()

有关详情,请参阅Javadoc getReader()getInputStream()