Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 优雅地检查HTTPSession引用是否仍然有效_Java_Httpsession - Fatal编程技术网

Java 优雅地检查HTTPSession引用是否仍然有效

Java 优雅地检查HTTPSession引用是否仍然有效,java,httpsession,Java,Httpsession,我将所有已建立的HTTPSession对象存储在哈希映射中。是 确定HTTPSession是否仍然有效的方法不多 在排队等候消息之前 示例:如果我对哈希进行迭代- 映射时,我只想将以下HTTPSession对象的消息排队 有效 更新 如果有人感兴趣,我需要使用gwt comet的这种逻辑。解决方案(正如Tomasz Nurkiewicz指出的)可以在页面底部找到。不幸的是,没有明确的API用于此。但它很容易以干净优雅的方式解决问题 实现将每个新创建的会话存储在并发映射中,并在会话被破坏时将其删除

我将所有已建立的HTTPSession对象存储在哈希映射中。是 确定HTTPSession是否仍然有效的方法不多 在排队等候消息之前

示例:如果我对哈希进行迭代- 映射时,我只想将以下HTTPSession对象的消息排队 有效

更新


如果有人感兴趣,我需要使用gwt comet的这种逻辑。解决方案(正如Tomasz Nurkiewicz指出的)可以在页面底部找到。

不幸的是,没有明确的API用于此。但它很容易以干净优雅的方式解决问题

实现将每个新创建的会话存储在并发映射中,并在会话被破坏时将其删除。这样,地图将始终只包含有效会话。干净多了,你不觉得吗

public class SessionStoringListener implements HttpSessionListener {

    private Map<String, HttpSession> sessions = new ConcurrentHashMap<String, HttpSession>();

    @Override
    public void sessionCreated(HttpSessionEvent httpSessionEvent)
    {
        HttpSession session = httpSessionEvent.getSession();
        sessions.put(session.getId(), session);
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent)
    {
        sessions.remove(httpSessionEvent.getSession().getId());
    }
}
公共类SessionStoringListener实现HttpSessionListener{
私有映射会话=新的ConcurrentHashMap();
@凌驾
已创建公共无效会话(HttpSessionEvent HttpSessionEvent)
{
HttpSession session=httpSessionEvent.getSession();
sessions.put(session.getId(),session);
}
@凌驾
公共无效sessionDestroyed(HttpSessionEvent HttpSessionEvent)
{
移除(httpSessionEvent.getSession().getId());
}
}

小心点,还有比赛条件。您仍然需要使用会话来处理错误。@Yuliy:您能再详细说明一下吗?我必须承认我在这里找不到比赛条件,我不知道你说的错误是什么意思。提前感谢。竞争是如果一个线程从容器中获取了一个HttpSession,而它却被另一个线程破坏了。