JavaServlet是否可以提取响应头的请求头的全文,而不是单独执行getHeader()方法?或者,是否可以获取这些头文件的完整大小(以字节为单位)?
我之所以这么问,是因为我想跟踪servlet和发送请求的设备之间的数据使用情况,并且由于将从不同设备发送的大量请求,我希望能够准确地表示出仅头就用完了多少字节。
提前谢谢。
最佳答案
api没有提供一种通过单个调用获取所有报头的方法-请检查javadocs:
http://download.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html
下面是一个如何获取所有头的示例(无需冗长的空检查)。
private MultiValueMap getAllHeaders(HttpServletRequest request) {
MultiValueMap allHeaders = new MultiValueMap();
List<String> headerNames = Collections.list((Enumeration<String>)request.getHeaderNames());
for (String headerName : headerNames) {
allHeaders.putAll(headerName, Collections.list((Enumeration<String>) request.getHeaders(headerName)));
}
return allHeaders;
}
一旦使用了JavaServlet模型,如果不重新构造它(即:遍历getAllHeaders并附加
<header name>: <header value>
),就无法获得以字节为单位的头大小,您还需要添加锅炉板GET HTTP 1/1.1
等。如果您绝对需要Java解决方案,这绝对是可行的,但是我觉得你应该考虑把这个逻辑从Java应用程序中推到代理中去。