【问题标题】:JSP Sessions in If statmentsIf 语句中的 JSP 会话
【发布时间】:2011-04-11 21:05:51
【问题描述】:

我无法准确理解 JSP 在会话方面的工作原理...基本上我在不同的 JSP 中设置会话,如下所示:

<%
String category = request.getParameter("category");
session.setAttribute("category", category); %>

然后在另一个页面中,我使用 if 条件根据已发布的类别生成 HTML,例如:

 <% String category = (String) session.getAttribute("category");

if(category == "movie") { 
out.println("Movie Details"); 
} else if (category == "music") { 
out.println("Music Details"); 
} %>

但似乎这两个 if 语句都没有被命中,但如果我实际打印出类别变量,它就会正确打印出来,即正在显示电影或音乐。是否有一些我没有掌握的会话概念?我已经搜索了无数页面,试图找到答案:/提前致谢。

【问题讨论】:

    标签: java jsp session


    【解决方案1】:

    您以错误的方式比较字符串。你应该使用equals(..) 而不是==

    == 检查实例是否相同,而.equals(..) 检查两个字符串是否具有相同的内容。你很少对前者感兴趣。

    因此,对于对象(与原语不同,== 是要走的路),使用:

    if (foo.equals(bar)) { .. }
    

    当您对 java 和 servlet API 有一定的经验时,您应该考虑一些 JSP 的最佳实践。最重要的是不要在 JSP 中编写 java 代码。 Here is an extensive explanation 如何以及为什么这样做。

    【讨论】:

    • 更不用说小脚本的邪恶了... :(
    • 我不能要求更好的解释我做错了什么......读了你的解释后我觉得很愚蠢。还与会话主题有关...我正在尝试将该变量(包含从会话中检索到的值)传递给 useBean 方法,例如: 但是变量 something 无法以这种方式填充,但是如果我必须在 doSomething() 方法中指定值“movie”,它将填充数组......我隐约缺少什么吗?
    • @Steven 你可以为此提出一个新问题。
    【解决方案2】:

    博卓已经回答了问题的真正原因。在 Java 中,对象值将通过equals() 方法进行比较。字符串是对象,而不是原语。请注意,此问题与 JSP 无关,而与基本 Java 有关。

    我只是想指出正确的方法:使用 taglibs/EL。如有必要,首先安装JSTL(例如 Tomcat 不附带它),然后在您的 JSP 顶部声明它。

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    

    你的第一个代码sn -p可以这样实现:

    <c:set scope="session" var="category" value="${param.category}" />
    

    你的第二个代码sn-p可以实现如下:

    <c:if test="${category == 'movie'}">Movie details</c:if>
    <c:if test="${category == 'music'}">Music details</c:if>
    

    <c:choose>
        <c:when test="${category == 'movie'}">Movie details</c:when>
        <c:when test="${category == 'music'}">Music details</c:when>
        <c:otherwise>Unknown category</c:otherwise>
    </c:choose>
    

    是的,通过== 比较字符串在EL 中是有效的。它将在幕后使用equals()

    【讨论】:

      猜你喜欢
      • 2016-11-21
      • 1970-01-01
      • 2018-01-21
      • 1970-01-01
      • 1970-01-01
      • 2021-12-16
      • 1970-01-01
      • 2016-06-03
      • 1970-01-01
      相关资源
      最近更新 更多