我有两个关于在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是:这是解决这个问题的错误方法吗? 有更好的方法吗?
答案 0 :(得分:0)
我不太清楚我对Comet的数据结构和控制流程的理解还不错,但看起来这很有效:
向“class CounterHandler”添加构造函数,并从'doGet()'传入'session'变量,其中调用“new CounterHandler”。具体来说,改变:
CometHandler handler = new CometHandler();
到
HttpSession session = request.getSession();
CometHandler handler = new CometHandler(session);
让构造函数将会话变量保存在类实例变量中。然后“onEvent()”方法可以访问会话属性。而鲍勃是你的叔叔。
(看起来很简单......好吧,现在。)