第一、在项目中引入dwr.jar,然后在web.xml中进行配置,配置如下:
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>
org.directwebremoting.servlet.DwrServlet
</servlet-class>
<init-param>
<param-name>crossDomainSessionSecurity</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>allowScriptTagRemoting</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>classes</param-name>
<param-value>java.lang.Object</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>3000</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>logLevel</param-name>
<param-value>WARN</param-value>
</init-param>
</servlet>
第二:在web.xml的同级目录下新建dwr.xml文件,内容如下
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "http://getahead.org/dwr/dwr30.dtd">
<dwr>
<allow>
<create creator="new" javascript="MessagePush">
<param name="class" value="com.huatech.messageremind.service.MessagePush"/>
</create>
</allow>
</dwr>
这个是dwr的基本配置,MessagePush在页面的javascript中使用,com.huatech.messageremind.service.MessagePush实现了想要调用的方法,MessagePush我觉得就相当于java类中的一个映射,在javascript中使用MessagePush.java类中实现的方法,即可在dwr中调用。
第三,要想使用dwr,还要在你想要推送的页面中引入script,
<script type="text/javascript" src="<%=basepath%>dwr/engine.js"></script>
<script type="text/javascript" src="<%=basepath%>dwr/util.js"></script>
<script type="text/javascript" src="<%=basepath%>dwr/interface/MessagePush.js"></script>
可以看见,也引入了dwr.xml中配置的javascript,engine.js和util.js是必须引入的。
以上三点都是基本配置,没什么好说的,想使用dwr,就得这么做。
第四,实现消息的精准推送(页面最重要的代码)
消息推送简单,但是想实现精准推送就需要做一些别的操作了
1 在任何一个用户登录的时候,都需要将其userId或者其他唯一性标识放入session中,这里以 userId为唯一性标识。
2 在载入想推送的页面时,需要onload一个我在MessagePush类中实现的方法,当然了,需要使用dwr调用
js的调用方法如下:
function onPageLoad(){
var userId = '${userinfo.userId}';
MessagePush.onPageLoad(userId);
}
<body onload="dwr.engine.setActiveReverseAjax(true);dwr.engine.setNotifyServerOnPageUnload(true);onPageLoad();> 在onload中的三个函数都是必须的,其中dwr.engine.setActiveReverseAjax(true);dwr.engine.setNotifyServerOnPageUnload(true);是dwr中的函数。
MessagePush类中实现的方法如下:
public void onPageLoad(String userId) {
ScriptSession scriptSession = WebContextFactory.get().getScriptSession();
scriptSession.setAttribute(userId, userId);
DwrScriptSessionManagerUtil dwrScriptSessionManagerUtil = new DwrScriptSessionManagerUtil();
try {
dwrScriptSessionManagerUtil.init();
} catch (ServletException e) {
e.printStackTrace();
}
}
大家注意到,onPageLoad方法中还有一个名为DwrScriptSessionManagerUtil的类,该类如下实现:
public class DwrScriptSessionManagerUtil extends DwrServlet{
private static final long serialVersionUID = 1L;
public void init()throws ServletException {
Container container = ServerContextFactory.get().getContainer();
ScriptSessionManager manager = container.getBean(ScriptSessionManager.class);
ScriptSessionListener listener = new ScriptSessionListener() {
public void sessionCreated(ScriptSessionEvent ev) {
HttpSession session = WebContextFactory.get().getSession();
String userId =((User) session.getAttribute("userinfo")).getHumanid()+"";
System.out.println("a ScriptSession is created!");
ev.getSession().setAttribute("userId", userId);
}
public void sessionDestroyed(ScriptSessionEvent ev) {
System.out.println("a ScriptSession is distroyed");
}
};
manager.addScriptSessionListener(listener);
}
}
第五、消息推送(后台核心业务代码)
推送消息,调用如下方法:
public void sendMessageAuto(String userid,String message) {
final String userId = userid ;
final String autoMessage = message;
Browser.withAllSessionsFiltered(new ScriptSessionFilter() {
public boolean match(ScriptSession session) {
if (session.getAttribute("userId") == null)
return false;
else
return (session.getAttribute("userId")).equals(userId);
}
}, new Runnable(){
private ScriptBuffer script = new ScriptBuffer();
public void run() {
script.appendCall("showMessage", autoMessage);
Collection<ScriptSession> sessions = Browser.getTargetSessions();
for (ScriptSession scriptSession : sessions) {
scriptSession.addScript(script);
}
}
});
}
userid即为你想推给消息的人,message为你想推送的消息,大家注意到这里script.appendCall("showMessage", autoMessage);当然也可以通过调用其他DWR的方法实现不同的调用方式。
其中showMessage为在想推送的页面中的javascript方法,autoMessage是这个方法的参数,这样那个页面就能得到推送的内容了,至于如何展现,就看需求了。
分享到:
相关推荐
在这个项目中,"dwr精准推送"是指利用DWR技术来实现针对特定用户的实时消息推送功能。 首先,我们来详细了解一下DWR的工作原理。DWR通过创建一个HTTP长连接或短连接(取决于配置)来保持客户端和服务器端的通信。当...
5. **消息精准推送**:在描述中提到了“消息精准推送”,这意味着我们需要根据用户或特定条件向客户端发送数据。DWR支持Push技术,可以主动将服务器端的数据推送到客户端。例如,可以创建一个后台线程,监听数据库...
本实例主要关注DWR的消息推送功能,这在创建实时更新的应用如聊天室、股票报价或在线游戏等场景中非常有用。 1. **DWR框架概述** DWR框架的核心是将Java对象暴露给JavaScript,使得前端可以像操作本地对象一样操作...
总的来说,结合DWR和Spring,我们可以构建出一个高效、可扩展的消息推送系统,使得Web应用能够实时地与用户互动,提升用户体验。在实际项目中,还需要考虑安全性、错误处理、性能监控等方面,确保系统的稳定性和可靠...
总的来说,DWR推送技术通过Comet实现了高效的服务器到客户端的数据推送,简化了实时Web应用的开发。结合提供的源码示例"j-jetty-dwr-comet-src",开发者可以深入理解DWR的工作原理,并学习如何在实际项目中应用这项...
本文将详细介绍如何实现DWR的服务器推送功能。 一、DWR简介 DWR的核心功能是通过AJAX技术创建了一个JavaScript到Java的桥梁,使得开发者可以像操作本地对象一样操作远程服务器上的对象。它支持自动类型转换、错误...
"WEB端精准消息推送 dwr" 这个标题暗示了我们要讨论的是一个基于DWR(Direct Web Remoting)技术实现的WEB应用,该应用具有精确的消息推送功能,可以实现在Web端进行一对一的消息传递。 **描述详解:** 描述中提到...
### dwr消息推送功能 Direct Web Remoting (DWR) 是一种开源框架,它简化了JavaScript与服务器端Java代码之间的交互。DWR 提供了一种简单的方法来将 Java 对象暴露给 JavaScript,允许 JavaScript 调用 Java 方法,...
在本文中,我们将深入探讨如何使用DWR实现服务器到客户端的消息推送。 1. **DWR基本概念** DWR的核心功能是提供一种方式让Java方法可以直接调用JavaScript函数,反之亦然。这使得服务器能够实时地向浏览器发送数据...
在“DWR后台精准推送信息至前台”这个主题中,我们将深入探讨DWR如何实现消息推送,并为初学者提供一个入门的指南。 1. **DWR基础概念**: - **Direct Web Remoting**:DWR的核心理念是创建一种无缝的接口,让...
总的来说,"dwr消息推送完整示例"旨在展示如何利用DWR实现实时的消息推送,这对于构建交互性强、用户体验良好的Web应用至关重要。通过学习和实践这个示例,开发者可以更好地理解和掌握DWR的特性和消息推送的实现方式...
当服务器有新消息时,会立即通过这个开放的连接推送给客户端,而无需客户端再次发起请求。 要实现DWR3的推送消息,首先需要在服务器端配置DWR。这包括创建`dwr.xml`配置文件,定义允许的远程方法,并启用推送支持。...
以后台向前台页面推送消息的一个完整实例工程,采用了spring、dwr反转,实现的是后台向前台不断推送消息,并管理相关用户退出;可以用在如定时任务的桌面消息提醒之类的场景。改变传统的前台定时刷新/请求后台的工作...
对于用户ID的使用,可能是通过Session存储用户信息,然后在推送时根据用户ID来决定将消息推送给哪个用户的浏览器。 总结来说,"dwr demo 反向推送 导向推送"是一个演示如何使用DWR实现实时服务器推送的项目,它包括...
这个"免积分"的例子可能是为了帮助开发者理解如何在DWR框架下实现实时的数据推送,而无需通过复杂的积分系统或者其他权限验证。这种推送技术在Web应用中非常有用,可以用来更新用户界面而无需手动刷新页面。 首先,...
DWR的核心特性是它支持AJAX(Asynchronous JavaScript and XML)以及服务器推送技术,极大地提高了Web应用的用户体验。 **服务器推送技术**: 传统的HTTP协议是基于请求-响应模型的,即客户端发起请求,服务器响应...
里面有详细的注释说明,主要实现DWR推送、线程监听、事件监听、主动推送。。写得不好,请见谅。。然后有个特别需要注意的,部署好项目以后,访问的方式是:http://localhost:9999/MonitorSystem/indexTo,特别注意...
### dwr实现消息精确推送详解 #### 一、前言 Direct Web Remoting(DWR)是一种开源技术,它使得JavaScript可以直接调用服务器端的Java方法成为可能,从而简化了客户端与服务器之间的交互过程。本篇文章将详细介绍...
利用DWR 3 实现推送功能,可以显著提升Web应用的实时性和用户体验。通过合理配置和编程,可以实现高效、稳定的推送服务,满足各种实时应用场景的需求。 以上就是DWR 3 实现推送功能的主要步骤和注意事项,希望对你...
除了代码实现,提供的`DWR推技术PPT.pptx`可能包含了一份详细的讲解,涵盖了DWR后台推送的基本概念、工作原理、配置步骤以及最佳实践。这份PPT可以作为深入理解DWR推送技术的补充资料。 另外,`DWR推技术在开发中...