突然发现我出书的可能性太小了,写了几篇小博文直接就是代码,没有啥文字修饰,好吧,
综合从网上看的资料,得出以下总结。
step.1
首先下载
dwr.jar
并在
web.xml
中
整合
DWR
及添加用户登入、登出监听器
<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>pollAndCometEnabled</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
<!--
用户登入、登出监听器
-->
<servlet>
<servlet-name>initScriptSessionListener</servlet-name>
<servlet-class>
com.success.platform.component.messages.init.InitScriptSession
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
step.2
·
建立
dwr.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting
3.0//EN" "http://www.getahead.ltd.uk/dwr/dwr30.dtd">
<dwr>
<allow>
<create
creator="spring" javascript="DwrHelper">
<param
name="beanName" value="messageHelper" />
</create>
</allow>
</dwr>
1.
javascript="DwrHelper"
web
页内引用的
JS
文件名
.
2.
name="beanName"
value="messageHelper"
spring
中
beanName
step.3
·
建立
InitScriptSession.java
·
用户登入、登出监听器
public class InitScriptSession extends GenericServlet {
/**
*
*/
private static final long
serialVersionUID = 1L;
private static final Logger
logger = Logger.getLogger(InitScriptSession.class);
ServletContext application;
public void init() {
Container
container = ServerContextFactory.get().getContainer();
ScriptSessionManager
manager = container.getBean(ScriptSessionManager.class);
ScriptSessionListener
listener = new ScriptSessionListener() {
public
void sessionCreated(ScriptSessionEvent ev) {
try
{
HttpSession
session = WebContextFactory.get().getSession();
ScriptSession
scriptSession = ev.getSession();
String
userId = session.getAttribute("userId").toString();
scriptSession.setAttribute("userId",
userId);
logger.info("add
" + scriptSession.getId()+ ", put userid into scriptSession");
}
catch (Exception e) {
logger.warn("
会话失效
");
}
}
public
void sessionDestroyed(ScriptSessionEvent ev) {
ev.getSession().removeAttribute("userId");
logger.info("destroy
ScriptSession: " + ev.getSession().getId());
}
};
manager.addScriptSessionListener(listener);
}
public void
service(ServletRequest req, ServletResponse res) {
init();
}
}
step.4
·
MessageEvent.java
·
消息监听
public class MessageEvent extends ApplicationEvent {
/**
*
*/
private static final long
serialVersionUID = 9103980818480475235L;
public MessageEvent(Object
source) {
super(source);
}
}
step.5
·
Message.java
消息实体
public class Message {
private String
receiverId;//
接收人
private String sender;
//
发送人
private String
content;
//
内容
private Date sendTime;
//
发送时间
public Message(String
receiverId, String sender, String content) {
super();
this.receiverId
= receiverId;
this.sender
= sender;
this.content
= content;
}
public String getSendTime()
{
String
sdate="";
try {
if(null
== sendTime)sendTime=DateUtil.currentDate();
sdate=DateUtil.dateToSting(sendTime);
} catch
(Exception e) {
}
return
sdate;
}
public void
setSendTime(Date sendTime) {
this.sendTime
= sendTime;
}
public String
getReceiverId() {
return
receiverId;
}
public void
setReceiverId(String receiverId) {
this.receiverId
= receiverId;
}
public String getSender() {
return
sender;
}
public void
setSender(String sender) {
this.sender
= sender;
}
public String getContent()
{
return
content;
}
public void setContent(String
content) {
this.content
= content;
}
}
step.6
MessageHelper.java
消息助手
@Service("messageHelper")
//
要和
dwr.xml
的
beanName
保持一致
@Scope("singleton")
public class MessageHelper implements ApplicationContextAware {
private static ApplicationContext
applicationContext;
public void
setApplicationContext(ApplicationContext ctx) {
MessageHelper.applicationContext
= ctx;
}
public static void
sendMessage(Message mes){
if(applicationContext
!= null){
applicationContext.publishEvent(new
MessageEvent(mes));
}
}
}
step.7
package com.success.platform.component.messages;
import java.util.Collection;
import org.directwebremoting.Browser;
import org.directwebremoting.ScriptBuffer;
import org.directwebremoting.ScriptSession;
import org.directwebremoting.ScriptSessionFilter;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Service;
import com.success.platform.util.WebConfig;
@Service
public class NotifyClient implements ApplicationListener<MessageEvent> {
public void onApplicationEvent(MessageEvent event) {
if (event instanceof MessageEvent) {
send((Message) event.getSource());
}
}
private void send(final Message msg) {
Browser.withAllSessionsFiltered(new ScriptSessionFilter() {
public boolean match(ScriptSession session) {
if (session.getAttribute("UserId") == null)
return false;
else
return (session.getAttribute("UserId"
)).equals(msg.getReceiverId());
}
}, new Runnable() {
public void run() {
Collection<ScriptSession> colls = Browser.getTargetSessions();
for (ScriptSession scriptSession : colls) {
scriptSession.addScript(initFunctionCall("showMessage", msg.getContent(),msg.getSender(),msg.getSendTime()));
}
}
});
}
private ScriptBuffer initFunctionCall(String funcName, Object... params) {
ScriptBuffer script = new ScriptBuffer();
script.appendCall(funcName, params);
return script;
}
}
step.8
-
index.jsp
-
这个页面,最好是个frameset 的主页面
<%@ page contentType="text/html; charset=UTF-8"%> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>DWR's HelloWorld</title> <script type='text/javascript' src='${path}/dwr/engine.js'></script> <script type='text/javascript' src='${path}/dwr/util.js'></script> <script type='text/javascript' src='${path}/scripts/common/MessageHelper.js'></script> <script type='text/javascript'> window.onload=activeReverseAjax; function activeReverseAjax(){ dwr.engine.setActiveReverseAjax(true); dwr.engine.setNotifyServerOnPageUnload(true);//页面销毁或刷新时销毁当前ScriptSession dwr.engine.setErrorHandler(null); } function showMessage(content,sender,sendtime) { $.messager.show({ title:sender + ' ' +sendtime, msg:content, timeout:0, showType:'slide' }); } </script> </head> <body> </body> </html>
step.9
测试的话,可在 运行后台 servie 调用
MessageHelper.sendMessage(new Message("消息发送人的ID,对应Session内的userId","系统消息", "你好 触摸不到的狂野 怎么样收到信息了吗?。" ));
分享到:
相关推荐
本实例是在一些网络资料的基础上整合出来的一个:以后台向前台页面推送消息的一个完整实例工程,采用了spring、dwr反转,实现的是后台向前台不断推送消息,并管理相关用户退出;可以用在如定时任务的桌面消息提醒之...
使用DWR实现服务器端向客户端精确推送消息
springMVC+dwr技术实现消息推送实例,简单实例演示如何用dwr实现后台向前台主动推送消息
dwr实现前台监控 后台推送即时信息 入门必看资料 里边含源码;
该文档介绍了dwr实现消息推送的具体步骤,希望对大家有所帮助,若有不明白的地方,可以给我发消息,小弟能解答的一定解答。
网络上Spring整合DWR comet 实现无刷新、多人聊天室 的代码整理,包含jar包,eclipse工程,直接导入即可运行。
使用dwr+spring实现消息推送 。
实现Comet消息推送功能,根据登陆人定向推送,解决刷新页面原有ScriptSession不能及时销毁的问题,DEMO比较简陋,请先进入login.jsp页面登陆。根据登陆名称判断推送目标,可登陆多个用户进行测试。
dwr3,推送消息,指定用户推送demo
以后台向前台页面推送消息的一个完整实例工程,采用了spring、dwr反转,实现的是后台向前台不断推送消息,并管理相关用户退出;可以用在如定时任务的桌面消息提醒之类的场景。改变传统的前台定时刷新/请求后台的工作...
亲测dwr消息推送代码,从后台推送消息至前台,特别适合刚开始学习dwr的朋友们入门
DWR+JAVA进行web消息推送dwr-comet.zip
实现Comet消息推送功能,根据登陆人定向推送,解决刷新页面原有ScriptSession不能及时销毁的问题,DEMO比较简陋,请先进入login.jsp页面登陆。根据登陆名称判断推送目标,可登陆多个用户进行测试。
springMvc + dwr 注解 实现消息推送 ,支持单个用户精确推送以及指定成员.群推送. 不需要任何配置修改,即可使用
实现 Dwr 服务器推送实现 Dwr 服务器推送实现 Dwr 服务器推送实现 Dwr 服务器推送实现 Dwr 服务器推送
既然找到了这个,我就不必多解释了,下下来可以直接运行
干货无需多扯,由于项目需求采用dwr3.0实现消息精准推送,以及JS调用后台Java函。Demo中有详细注释
里面有详细的注释说明,主要实现DWR推送、线程监听、事件监听、主动推送。。写得不好,请见谅。。然后有个特别需要注意的,部署好项目以后,访问的方式是:http://localhost:9999/MonitorSystem/indexTo,特别注意...
dwr消息推送功能。可以实现实时消息推送
使用dwr实现服务器的消息推送。 详细说明了服务器向前台推送消息的步骤,绝对有用。