我使用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
。我认为那是因为前一个处理程序已经读取了所有数据。但是我怎么能按照我需要的方式记录呢?
答案 0 :(得分:0)
标准Servlet行为。
如果您的Servlet读取请求正文(通过getInputStream()
或getReader()
),那么您已阅读它,无法再次阅读。
使用的技术getReader()
或getInputStream()
是如何呈现身体内容,并且无法更改。
getReader()
,则以后无法使用getInputStream()
。getInputStream()
,则以后无法使用getReader()
。有关详情,请参阅Javadoc getReader()
和getInputStream()
。