如何使用EL获取JSP页面中第一个cookie的名称?

时间:2016-03-02 21:31:13

标签: jsp cookies el

在JSP页面${cookie[0].value.name}中使用EL,这不会打印任何内容,但如果我只使用${cookie},则会打印cookie列表。如何只打印第一个名称?

1 个答案:

答案 0 :(得分:0)

隐式EL变量${cookie}本质上是Map<String, Cookie>,其中cookie名称是键,Cookie实例本身就是值。

因此不是List。您无法通过基于整数的索引访问映射条目。只能通过cookie名称访问此特定映射的特定条目。以下示例假定foo为Cookie名称。

${cookie.foo}

其值可以如下获得。

${cookie.foo.value}

你可以用笨拙的方式访问Map<K,V>的第一个条目(尽管不比“普通Java”更笨拙)。

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

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

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

name实例的Cookie属性作为地图值。

${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,然后打开标签网络