我希望在一个servlet中监控响应大小,因此我计划添加过滤器来实现此功能。
但是当我查看HttpServletResponse
方法时,我不知道如何获取响应大小:
response.getWriter()
response.getOutputStream()
有没有一种有效的方式来计算总响应大小?
(Status-Line):HTTP/1.1 200 OK
Connection:Keep-Alive
Date:Fri, 10 Mar 2015 14:00:00 GMT
Content-Length:728
HttpServletResponseWrapper
,该包装类将覆盖getWriter
和getOutputStream
方法。这两个方法将返回实际流的包装类,以统计写入的字符数。 public static Long getByteCount(final HttpServletResponse response) {
try {
Field innerResponseField = ServletResponseWrapper.class.getDeclaredField("response");
innerResponseField.setAccessible(true);
innerResponseField.get(response);
Object innerResponse = innerResponseField.get(response);
Field contentWrittenField = OnCommittedResponseWrapper.class.getDeclaredField("contentWritten");
contentWrittenField.setAccessible(true);
return (Long) contentWrittenField.get(innerResponse);
} catch (Exception e) {
return null;
}
}
使用JavaEE API无法获取HttpServletRequest的总大小。