如何在JSP EL中检查会话?

时间:2012-02-03 21:26:24

标签: java jsp session el

如何检查EL中的请求是否存在会话?我正在尝试这样的事情:

<c:if test="${pageContext.request.session != null}"> ... </c:if>

但似乎它永远不会为空。

3 个答案:

答案 0 :(得分:13)

确实从未null。会话始终存在于JSP EL中,除非添加

<%@page session="false" %>

到JSP的顶部。然后,您可以按如下方式检查会话(仅限EL 2.2!):

<c:if test="${pageContext.request.getSession(false) != null}">
    <p>The session has been created before.</p>
</c:if>

我不确定具体的功能要求是什么。如果您想检查会话是新的还是已创建,请改用HttpSession#isNew()

<c:if test="${not pageContext.session['new']}">
    <p>You've already visited this site before.</p>
</c:if>
<c:if test="${pageContext.session['new']}">
    <p>You've just started the session with this request!</p>
</c:if>

new的括号表示法是必需的,因为new是Java语言中的保留文字)

如果您依赖于特定的会话属性,例如已设置为

的已登录用户
session.setAttribute("user", user);
那么你应该宁愿拦截它:

<c:if test="${not empty user}">
    <p>You're still logged in.</p>
</c:if>
<c:if test="${empty user}">
    <p>You're not logged in!</p>
</c:if>

答案 1 :(得分:1)

似乎适用于:

<c:if test="${fn:length(sessionScope) > 0}">

我想知道是否有更好的方法,因为这需要我有会话属性(我总是这样做,但它不是很干净)?

答案 2 :(得分:1)

在J2EE中,当用户访问站点时,总会有一个会话对象。

什么是会话? 会话几乎就是它的声音,当用户向服务器发出页面请求时,服务器会创建一个临时会话来识别该用户。因此,当同一用户转到该站点上的另一个页面时,服务器会识别该用户。因此,会话是服务器和用户之间的一个小而临时的唯一连接,使其能够跨多个页面请求或访问该站点来识别该用户。

所以基本上如果你打一个页面就会有一个会话,因为你使用了JSP,最终会转换成servlet。

http://www.stardeveloper.com/articles/display.html?article=2001062001&page=1