【问题标题】:Check if Cookie exists with JSP EL使用 JSP EL 检查 Cookie 是否存在
【发布时间】:2011-11-15 17:56:45
【问题描述】:

我正在尝试使用表达式语言检查 JSP 页面上是否存在 cookie。

我有一个名为 persist 的 cookie,它设置为空字符串或“已检查”。

如果想检查persist cookie 是否存在。

我尝试了以下方法:

<c:if test="${cookie.persist == null}">

<c:if test="${empty cookie.persist}">

persist cookie 的值为空字符串时,上述两个语句都是true,当cookie 的值为checked 时,则为false。

如何区分以空字符串为值的cookie和不存在的cookie。

(注意:我可以通过为 cookie 分配一个非空值而不是空字符串来轻松解决这个问题。)

【问题讨论】:

    标签: java jsp servlets el


    【解决方案1】:

    如果使用 Tomcat 6+

    <c:if test="${ ! empty cookie['persist']}"> 
    Cookie doesn't exist
    </c:if>
    

    【讨论】:

    • 这个表达式不检查是否有cookie,而是检查是否有cookie值。 OP 的具体问题是,当 cookie 存在但包含空值时它也会通过。请重新阅读问题和所有答案。
    【解决方案2】:

    您可以获得的最接近的方法是检查请求 cookie 标头中的 cookie 名称。

    <c:if test="${fn:contains(header.cookie, 'persist=')}">
    

    但是,当有另一个名为 foopersist 的 cookie 时,它​​会失败。

    如果您的容器支持 EL 2.2(所有 Servlet 3.0 容器,如 Tomcat 7、Glassfish 3 等),那么您可以使用 Map#containsKey()

    <c:if test="${cookie.containsKey('persist')}">
    

    如果你没有,最好的办法是创建一个 EL 函数(更具体的声明示例可以在this answer 底部附近的某处找到):

    <c:if test="${util:mapContainsKey(cookie, 'persist')}">
    

    public static boolean mapContainsKey(Map<String, Object> map, String key) {
        return map.containsKey(key);
    }
    

    【讨论】:

    • 如果我错了,请纠正我,但第二种方法似乎对我不起作用。我得到了与使用 &lt;c:if test="${empty cookie.persist}"&gt; 相同的结果
    • 第一种方法效果很好。我的 cookie 上有一个应用程序前缀,所以我应该没问题。
    【解决方案3】:

    如果我理解正确,您想检测它不存在或为空。

    编辑:啊。要验证它不存在,它必须为 null 且不为空。

        <c:if test="${cookie.persist == null && cookie.persist != ''}">
       Cookie doesn't exist
        </c:if>
    

    【讨论】:

    • 我只是想检查 cookie 是否不存在。
    • 当我使用 ${cookie.persist == null} 时,如果 cookie 存在并且设置为 ''(空字符串),则返回 true
    【解决方案4】:

    使用 cookie 映射来检查 cookie 是否存在 ${cookie["persist"] == null}

    我希望它有效

    【讨论】:

    • 抱歉没用。 ${cookie["persist"] == null} 给出了与 ${cookie.persist == null} 相同的结果
    猜你喜欢
    • 2012-10-15
    • 2012-05-17
    • 1970-01-01
    • 2011-08-23
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 2012-03-10
    相关资源
    最近更新 更多