我希望监视servlet中的响应大小,因此我计划添加过滤器来实现此功能。
但是当我检查HttpServletResponse
方法时,我不知道如何获得响应大小:
response.getWriter()
response.getOutputStream()
有没有有效的方法来计算总响应大小?
答案 0 :(得分:1)
您可以使用过滤器为servlet提供HttpServletResponseWrapper
,该getWriter
将覆盖getOutputStream
和 // calculating the difference b/w startDate and endDate
String startDate = "01-01-2016";
String endDate = simpleDateFormat.format(currentDate);
date1 = simpleDateFormat.parse(startDate);
date2 = simpleDateFormat.parse(endDate);
long getDiff = date2.getTime() - date1.getTime();
// using TimeUnit class from java.util.concurrent package
long getDaysDiff = TimeUnit.MILLISECONDS.toDays(getDiff);
。这两种方法都会将包装器返回给实际的流,这些流计算写在那里的字符。
答案 1 :(得分:1)
您不必自己监控这些基本的HTTP内容,Tomcat会为您完成:
将AccessLogValve添加到println(map("1")("1.1")("1.1.1"))
,然后您可以在访问日志中获得server.xml
变量给出的响应大小。
答案 2 :(得分:0)
如果您有权访问响应标头,则可以阅读Content-Length。例如,
(Status-Line):HTTP/1.1 200 OK
Connection:Keep-Alive
Date:Fri, 10 Mar 2015 14:00:00 GMT
Content-Length:728
答案 3 :(得分:0)
使用JavaEE API无法获得HttpServletRequest的总大小。
答案 4 :(得分:0)
反射FTW。
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;
}
}