2016-03-02 46 views

回答

0

隐式EL变量${cookie}本质上是Map<String, Cookie>,其中cookie名称是关键字,而Cookie实例本身就是该值。因此不是List。您无法通过基于整数的索引访问映射条目。此特定地图的特定条目只能通过cookie名称访问。以下示例假定foo作为cookie名称。

${cookie.foo} 

其值可以如下获得。

${cookie.foo.value} 

您可以在下面笨拙的方式(不高于“普通的Java”虽然少了笨拙的)访问Map<K,V>的第一个条目。

${cookie.entrySet().iterator().next()} 

其名称可以通过地图键打印如下。

${cookie.entrySet().iterator().next().key} 

或者作为Cookie实例作为映射值的name财产。

${cookie.entrySet().iterator().next().value.name} 

您只需要记住,Servlet规范中没有任何内容保证cookie映射的排序。它可能会在封面下使用HashMap,然后排序与您在请求标题中看到的不同,甚至在每个请求中都会有所不同。

尽管如此,抓住“第一个”饼干显然不知道它的名字是腥的。这表明一个更大的设计问题。如果您知道cookie名称,请直接使用它。

${cookie.foo} 

否则,你需要退后一步,重新考虑你试图解决您可能错误地以为,这种做法是正确的解决方案的问题的解决方案。另一方面,也许你只是为了调试目的而打印所有cookie的名称=值对?

<c:forEach items="${cookie}" var="currentCookie"> 
    Cookie name as map entry key: ${currentCookie.key}<br/> 
    Cookie object as map entry value: ${currentCookie.value}<br/> 
    Name property of Cookie object: ${currentCookie.value.name}<br/> 
    Value property of Cookie object: ${currentCookie.value.value}<br/> 
    <br/> 
</c:forEach> 

你也可以在浏览器的内置HTTP流量监视器中找到它们。在Chrome/FireFox23 +/IE9 +中按F12并打开标签Network

相关问题