我使用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
。我认为那是因为先前的处理程序已经读取了所有数据。但是,如何才能按照我需要的方式进行记录? 最佳答案
标准Servlet行为。
如果您的Servlet(通过getInputStream()
或getReader()
)读取了请求正文,那么您已经读取了它,则无法再次读取它。getReader()
或getInputStream()
所使用的技术是显示身体内容的方式,无法更改。
如果使用getReader()
,则以后不能使用getInputStream()
。
如果使用getInputStream()
,则以后不能使用getReader()
。
有关更多详细信息,请参见getReader()
和getInputStream()
的Javadoc。