2016-03-02 16 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

相關問題