81,092
社区成员
发帖
与我相关
我的任务
分享
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>activeReverseAjaxEnabled</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>initApplicationScopeCreatorsAtStartup</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>maxWaitAfterWrite</param-name>
<param-value>100</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
<servlet>
<!-- Reverse Ajax DWR 推技术 -->
<create creator="new" javascript="ChatManager">
<param name="class" value="com.hdkj.sgcc.chat.ChatManager"/>
</create>
<convert converter="bean" match="com.hdkj.sgcc.chat.Message" />
public void sendMessage(String sendId,String receiverId,String title,String content
,HttpServletRequest request){
try {
// 获得接收者的 ScriptSession
ScriptSession session = this.getScriptSession(this.getSessionId(receiverId), request);
// 没有该用户的 ScriptSession , 表示该用户没有上线, 则不进行操作
if(session == null){
}else{
Message message = new Message();
message.setSendId(sendId);
message.setSender(this.getUserName(sendId));
message.setReceiverId(receiverId);
message.setReceiverName(this.getUserName(receiverId));
message.setTitle(title);
message.setContent(content);
messages.add(message);
// 拼凑 javascript 脚本
ScriptBuffer script = new ScriptBuffer();
script.appendScript("receiveMessages(").appendData(messages).appendScript(");");
System.out.println(session); // 可以获得 session
// 将数据推送到客户端的 javascript 函数中。
// 此处, 推送到客户端的时候只能推送一次, 大约过了 1分钟后就不能再次推送出去了。
session.addScript(script);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
.....
public static List<User> users = new ArrayList<User>();
....
ScriptSession session = this.getScriptSession(this.getSessionId(userId), request);
// session 集合中没有该用户的 ScriptSession ,则添加新的 ScriptSession
if(session == null){
// 将所有用户存储到集合列表中,标示他们的是用户 ID 和 Session ID
User user = new User(userId , request.getSession().getId(),this.getUserName(userId));
users.add(user);
WebContextFactory.get().getScriptSession().setAttribute("userId", request.getSession().getId());
}else{
// 如果存在该用户的 ScriptSession,
// 则清除已有连接, 标识当前连接用户(登录或刷新页面时,进行必要的清理).
session.invalidate();
session = null;
WebContextFactory.get().getScriptSession().setAttribute("userId", request.getSession().getId());
}