针对彗星的“onEvent”方法的特定于会话的信息

时间:2013-12-11 16:50:55

标签: comet

我有两个关于在Glassfish中使用Comet功能的问题。我 这个很新,所以如果有一个简单的答案或一些文件 我应该读请告诉我!感谢。

我正在构建一个有多个微控制器发送数据的系统 到中央DB。用户通过浏览器以格式查看数据 (公制与英语,比如说)他们自己选择的。显示需要 无需用户操作即可更新。看起来像Glassfish + Comet应该 完美。所以我开始使用Oracle的“hidden_​​Comet”示例,并且 效果很好。

问题#1是这样的:如何获得特定于会话的信息 进入“onEvent”方法?

作为上下文,这是代码;它直接来自Oracle示例:

private class CounterHandler implements CometHandler<HttpServletResponse> {

    private HttpServletResponse response;

    public void onEvent(CometEvent event) throws IOException
    {
        if (CometEvent.NOTIFY == event.getType())
        {

            PrintWriter writer = response.getWriter();

            writer.write("<script type='text/javascript'>");

            [... etc. Here is where I need to pass some session-specific
             info to the JavaScript]

            event.getCometContext().resumeCometHandler(this);
        }
    }

看起来会话属性是完美的,但看起来 就像你无法从“HttpServletResponse”获得'session'变量。 我想过使用cookies,但它们似乎只能用于访问 HttpServletRequest,而不是“......响应”,如上所述,只有'响应' 可以在“onEvent”方法中找到。

问题#1是:你是怎么做到的?

问题#2是:这是解决这个问题的错误方法吗? 有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

我不太清楚我对Comet的数据结构和控制流程的理解还不错,但看起来这很有效:

向“class CounterHandler”添加构造函数,并从'doGet()'传入'session'变量,其中调用“new CounterHandler”。具体来说,改变:

 CometHandler handler = new CometHandler();

 HttpSession session = request.getSession();
 CometHandler handler = new CometHandler(session);

让构造函数将会话变量保存在类实例变量中。然后“onEvent()”方法可以访问会话属性。而鲍勃是你的叔叔。

(看起来很简单......好吧,现在。)