1
Jetty를 사용하고 요청 매개 변수와 본문을 기록하고 싶습니다. 핸들러Jetty RequestLog - 요청 읽기 본문을 읽으십시오.
추가 AccessLogger : 나는 request.getReader()
를 실행하려고하면
@Override
public void log(Request request, Response response) {
request.getReader();
}
문제는이 IllegalStateException: STREAMED
를 말한다 :
ServletContextHandler servletContextHandler = new ServletContextHandler();
...
RequestLogHandler requestLogHandler = new RequestLogHandler();
requestLogHandler.setRequestLog(new AccessLogger());
HandlerCollection handlers = new HandlerCollection();
handlers.setHandlers(new Handler[]{
servletContextHandler,
requestLogHandler
});
AccessLogger는 RequstLog 인터페이스를 구현합니다. 이전 처리기가 이미 모든 데이터를 읽었 기 때문입니다. 그런데 내가 필요로하는 방식으로 어떻게 기록 할 수 있습니까?
예, 그렇습니다. 그러나이 경우의 해결 방법은 무엇입니까? 여러 핸들러가있을 수 있으면 요청에서 모두 읽을 수 있어야합니다. 맞습니까? – awfun
아니, 서블릿 사양에서 지원하지 않습니다. 필요하다면, 어딘가에 콘텐트를 읽고 캐시해야하며, 이후의 각 서블릿은 서블릿 API가 아닌 캐시 된 버전에 액세스해야합니다. Servlet 3.1과 Async I/O가 스펙에 추가 되었기 때문에 HttpServletRequest를 오버라이드/랩핑하는 복잡한 것을 생각해 낼 수 있습니다. –