如何在HttpServletResponse中獲取Content-Type,Server等http響應頭文件?需要獲得所有可用的頭文件。Servlet或過濾器或監聽器中的HttpResponse頭文件
當我們使用openConnection的UrlConnection並使用getHeaderFields時,我們得到了所有這樣的頭文件。但是當我們用HttpServletResponse使用getHeaderNames時,我們沒有得到這樣的頭文件。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
Enumeration<String> requestHeaders = request.getHeaderNames();
while(requestHeaders.hasMoreElements())
{
String header = requestHeaders.nextElement();
System.out.println("request headerrrrrrr>>" + header);
}
Collection<String> responseHeaders = response.getHeaderNames();
Iterator<String> it = responseHeaders.iterator();
while(it.hasNext()){
String header = it.next();
System.out.println("response headerrrrrr>>" + header);
}
response.getWriter().append("Served at: ").append(request.getContextPath());
}
Chrome開發者工具,我可以看到下面的
General
Request URL:http://localhost:8080/TestWebApp/MyTestServlet
Request Method:GET
Status Code:200 OK
Remote Address:[::1]:8080
Response Headers
Content-Length:22
Date:Fri, 03 Mar 2017 07:40:56 GMT
Server:Apache-Coyote/1.1
Request Headers
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch, br
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Cookie:JSESSIONID=DF62FC092F67FBB02AF68BC646085065; ai_user=MKfG+|2017-03-02T10:44:54.721Z; _ga=GA1.1.1362801303.1488451499
Host:localhost:8080
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
但是控制檯輸出僅僅是請求頭
request headerrrrrrr>>host
request headerrrrrrr>>connection
request headerrrrrrr>>upgrade-insecure-requests
request headerrrrrrr>>user-agent
request headerrrrrrr>>accept
request headerrrrrrr>>accept-encoding
request headerrrrrrr>>accept-language
request headerrrrrrr>>cookie
我一樣在Log only http servlet response headers在BalusC答案提提及。但似乎是不工作的我需要什麼
創建一個與doFilter方法過濾如下
public void doFilter(ServletRequest request, final ServletResponse response, FilterChain chain) throws IOException, ServletException {
DOMConfigurator.configure("C:\\log4j.xml");
Logger logger = Logger.getLogger(TestFilter.class);
logger.info("do Filter TestFilter");
final Map<String, List<String>> headers = new HashMap<String, List<String>>();
chain.doFilter(request, new HttpServletResponseWrapper((HttpServletResponse) response) {
@Override public void setHeader(String name, String value) {
List<String> values = new ArrayList<String>();
values.add(value);
headers.put(name, values);
super.setHeader(name, value);
}
@Override public void addHeader(String name, String value) {
List<String> values = headers.get(name);
if (values == null) {
values = new ArrayList<String>();
headers.put(name, values);
}
values.add(value);
super.addHeader(name, value);
}
});
logger.info("headers size>>"+headers.size());
logger.info("these are the headers>>"+headers);
}
和控制檯日誌
INFO 2017-03-03 05:14:23,765 [http-bio-8080-exec-3] com.test.TestFilter - do Filter TestFilter
INFO 2017-03-03 05:14:23,768 [http-bio-8080-exec-3] com.test.TestFilter - headers size>>0
INFO 2017-03-03 05:14:23,768 [http-bio-8080-exec-3] com.test.TestFilter - these are the headers>>{}
也許我錯過了什麼?
你到底想達到什麼目的?使用響應將東西寫入瀏覽器。所以你應該用它來設置標題。不要閱讀它們。 –
當我們調用servlet時,我們得到了響應頭和響應頭。而這個響應頭文件正在瀏覽器中打印。因此,相同的響應頭文件,我們可以在servlet或過濾器中獲取它嗎?就像我們做的那樣,將這些頭文件作爲UrlConnection.getHeaderFields的一部分使用 –