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

发布于 2024-11-11 17:31:25 字数 327 浏览 3 评论 0原文

我将所有已建立的 HTTPSession 对象存储在哈希映射中。是 无论如何,确定 HTTPSession 是否仍然有效 在将消息排队之前?

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

更新

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

I'm storing all established HTTPSession objects in a hash-map. Is
there anyway of determining whether a HTTPSession is still valid
before en-queuing a message?

Example: if I am iterating over the hash-
map, I only want to enqueue messages for HTTPSession objects that are
valid.

UPDATE

If anyone is interested, I needed this logic with the use of gwt-comet. The solution (as Tomasz Nurkiewicz pointed out) can be found at the bottom this page.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

怀中猫帐中妖 2024-11-18 17:31:25

不幸的是,没有明确的 API 来实现这一点。但它很容易以干净和优雅的方式解决。

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

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());
    }
}

Unfortunately there is no explicit API for this. But it is easy to workaround in clean and elegant manner.

Implement HttpSessionListener storing every newly created session in a concurrent map and removing it when session is destroyed. This way your map will always contain only valid sessions. Much cleaner, don't you think?

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());
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文