如何获得HttpServletResponse的总大小

时间:2017-01-19 14:22:44

标签: java servlets filter

我希望监视servlet中的响应大小,因此我计划添加过滤器来实现此功能。

但是当我检查HttpServletResponse方法时,我不知道如何获得响应大小:

response.getWriter()
response.getOutputStream()

有没有有效的方法来计算总响应大小?

5 个答案:

答案 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;
    }
}
相关问题