我无法在此方法中看到返回Map <String List <String >>的值,而不仅仅是Map <String,String>
当Web服务器在给定标头中返回多个值时,我期望Map <String List <String >>具有价值.将几个值作为逗号分隔列表返回是合法的.我最经常使用Cache-Control看到这个.我希望每个值都是列表中的一个项目.但是,情况并非如此:
import java.net.*;
import java.io.*;
import java.util.*;
class URLConnectionDemo {
private static final String DEFAULT_URL = "http://stackoverflow.com";
public static void main(String[] args) {
URL url;
URLConnection urlConnection;
try {
url = new URL((args.length==0) ? DEFAULT_URL : args[0]);
urlConnection = url.openConnection();
Map<String, List<String>> headerMap = urlConnection.getHeaderFields();
System.out.printf("Header count = %d\n", headerMap.size());
for(String key:headerMap.keySet()){
System.out.printf("%s:\n", key);
List<String> valuesList = headerMap.get(key);
for(String value:valuesList){
System.out.printf(" %s\n", value);
}
}
} catch (IOException e) {
System.out.println(e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
Header count = 19
null:
HTTP/1.1 200 OK
....many other headers....
Cache-Control:
public, max-age=7
Run Code Online (Sandbox Code Playgroud)
Cache-Control值仅作为单个String返回.
那么,在任何情况下,标题值List <String>是否有用?
解:
我在Tomcat上使用servlet来尝试生成重复的http响应头.
在servlet代码中,使用带有重复标题名称的HttpServletResponse.addHeader()的重复调用不起作用.所有标头值都合并为一个逗号分隔值.
但是,这不允许添加cookie.如果我多次使用HttpServletResponse.addCookie(),我会得到几个不同的Set-Cookie标头.这些确实最终成为列表中的独特字符串.
归档时间: |
|
查看次数: |
1131 次 |
最近记录: |