DWR简介

DWR(Direct Web Remoting)可用于实现javascript直接调用java函数和后台直接调用页面javascript代码,后者可用作服务端推送消息到Web前端。

(服务器推送技术又称为Comet技术,是继AJAX后又一热门技术)

以下链接可作简单了解

官网

http://directwebremoting.org/dwr/

JavaDoc

http://www.directwebremoting.org/dwr/javadoc/

入门讲解(前端)

http://directwebremoting.org/dwr/introduction/getting-started.html

入门讲解(后台)

http://directwebremoting.org/dwr/documentation/server/javaapi.html

下载地址

http://directwebremoting.org/dwr/downloads/index.html


需求场景

移动端用户向后台上传实时坐标后,后台需通知WEB页面在地图上实时更新用户位置。

实现过程

1、导入jar包(若用maven则添加依赖关系)

  地址: http://directwebremoting.org/dwr/downloads/index.html

2、web.xml中添加servlet

  1. <servlet>
  2. <servlet-name>dwr-invoker</servlet-name>
  3. <servlet-class>
  4. org.directwebremoting.servlet.DwrServlet
  5. </servlet-class>
  6. <init-param>
  7. <param-name>pollAndCometEnabled</param-name>
  8. <param-value>true</param-value>
  9. </init-param>
  10. </servlet>
  11. <servlet-mapping>
  12. <servlet-name>dwr-invoker</servlet-name>
  13. <url-pattern>/dwr/*</url-pattern>
  14. </servlet-mapping>

3、编写前端

1)页面引入dwr相关js(无需导入js文件)

  1. <script type='text/javascript' src='dwr/engine.js'></script>
  2. <script type='text/javascript' src='dwr/util.js'></script>

2)页面初始化时初始dwr参数

  1. $(function(){
  2. initDwr();
  3. });
  4. //初始化dwr
  5. function initDwr(){
  6. dwr.engine.setActiveReverseAjax(true); //在web.xml配置无效只好在此配置
  7. }

3)编写供后台调用的函数

  1. //更新用户位置
  2. function updateUserLocation(userid, longitude, latitude){
  3. mapMarkerList[userid].setPosition(new AMap.LngLat(longitude,latitude)); //更新地图Marker的位置
  4. }

5、后台

1)编写DwrUtil工具类

  1. public class DwrUtil {
  2. /**
  3. * 调用页面javascript函数
  4. * @param functionName
  5. * @param args
  6. */
  7. public void invokeJavascriptFunction (String _funcName, List _args){
  8. final String funcName = _funcName;
  9. final List args = _args;
  10. Browser.withAllSessions(new Runnable(){
  11. private ScriptBuffer script = new ScriptBuffer();
  12. public void run(){
  13. //拼接javascript
  14. script = script.appendScript(funcName+"(");
  15. for(int i=0; i<args.size(); i++){
  16. if(i != 0){
  17. script = script.appendScript(",");
  18. }
  19. script = script.appendData(args.get(i));
  20. }
  21. script.appendScript(")");
  22. //System.out.println(script.toString());
  23.  
  24. Collection<ScriptSession> sessions = Browser.getTargetSessions();
  25. for (ScriptSession scriptSession : sessions){
  26. scriptSession.addScript(script);
  27. }
  28. }
  29. });
  30. }
  31. }

2)业务逻辑中调用javascript代码实现推送功能

  1. @RequestMapping(value = "api/apiBaseController/testUploadLocation.do")
  2. @ResponseBody
  3. public AjaxJson testUploadLocation(HttpServletRequest request) {
  4. // 参数获取
  5. String userid = request.getParameter("userid");
  6. String longitude = request.getParameter("longitude");
  7. String latitude = request.getParameter("latitude");
  8. //推送到web端
  9. DwrUtil t = new DwrUtil();
  10. List args = new ArrayList();
  11. args.add(userid);
  12. args.add(longitude);
  13. args.add(latitude);
  14. t.invokeJavascriptFunction("updateUserLocation",args);
  15.  
  16. AjaxJson ajaxjson = new AjaxJson();
  17. ajaxjson.setStatusmsg("上传成功");
  18. ajaxjson.setUsermsg("上传成功");
  19. return ajaxjson;
  20. }

DWR实现后台推送消息到web页面的更多相关文章

  1. iOS极光推送 点击推送消息跳转页面

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launc ...

  2. iOS 极光推送 如何点击推送消息跳转页面

    假如你已经集成完了极光,恰好有这个问题不知如何解决,可以看看这篇文章,这篇是针对远程通知的,本地通知大同小异吧. 根据我项目的要求,极光推送跳转指定页面分为两种情况:app在后台情况和app在杀死的情 ...

  3. 用websocket实现后台推送消息

    1前台实现 connect:function() { var webSocketIP = window.CRM_CONFIG.WebSocketIP; var target = 'ws://'+web ...

  4. [代码]Java后台推送消息到IOS前端

    PayLoad payLoad = new PayLoad(); payLoad.addAlert("test");    //手机端的提示消息 payLoad.addBadge( ...

  5. DWR实现服务器向客户端推送消息

    原文链接 http://www.blogjava.net/stevenjohn/archive/2012/07/07/382447.html这片文章还是给了我很大帮助,再次表示感谢,下面我将这两天的研 ...

  6. Android APP切换到后台接收不到推送消息

    1.   Android端进程被杀死后,目前自带的保护后台接收消息活跃机制.暂时没有什么好的机制保持任何情况下都活跃 android原生系统用home键杀进程可以起来,如果是强行停止就只能用户自己手动 ...

  7. Websocket实现Java后台主动推送消息到前台

    写在前面 需求: 项目测试, 缺少用户登录失败给admin推送消息, 想到这个方式, 当用户登录失败时, admin用户会在页面看到咣咣乱弹的alert. 正文 pom.xml <!-- web ...

  8. DWR3.0框架入门(2) —— DWR的服务器推送

    DWR3.0框架入门(2) —— DWR的服务器推送 DWR 在开始本节内容之前,先来了解一下什么是服务器推送技术和DWR的推送方式.   1.服务器推送技术和DWR的推送方式   传统模式的 Web ...

  9. 用JPUSH极光推送实现服务端向安装了APP应用的手机推送消息(C#服务端接口)

    这次公司要我们做一个功能,就是当用户成功注册以后,他登录以后要收到消息,当然这个消息是安装了我们的手机APP应用的手机咯. 极光推送的网站的网址是:https://www.jpush.cn/ 极光推送 ...

随机推荐

  1. 大公司的PHP面试题

    1. 禁用COOKIE 后 SEESION 还能用吗? 2. 抓取远程图片到本地,你会用什么函数? 4. 你觉得在pV10W的时候, 同等配置下,LUNIX 比WIN快多少? 5. 简述pOST 和G ...

  2. 如何从零基础学习VR

    转载请声明转载地址:http://www.cnblogs.com/Rodolfo/,违者必究. 近期很多搞技术的朋友问我,如何步入VR的圈子?如何从零基础系统性的学习VR技术? 本人将于2017年1月 ...

  3. Ubuntu下Sublime Text 3解决无法输入中文的方法

    Ubuntu下Sublime Text 3解决无法输入中文的方法_百度经验http://jingyan.baidu.com/article/f3ad7d0ff8731609c3345b3b.html ...

  4. win10 系统怎么获取最高管理员权限删除文件

    http://www.xitongcity.com/jiaocheng/win8_content_3473.html 很多win8.1系统用户在对磁盘文件进行清理时,经常会遇到“文件夹访问被拒绝,您需 ...

  5. Spring Autowired 注入失败总是Null

    报错:NullPointerException 分析:错误原因是注入失败? <context:annotation-config/> <context:component-scan ...

  6. YUM源设置

    1挂载光盘 先创建一个文件 /aaa 然后挂载mount /dev/cdrom /aaa 进入 /aaa   ls 查看是否挂载OK 2进入yum文件夹.将除Media以外的所有文件名改为XXXXXX ...

  7. MSSQL 死锁查询

    SELECT SYS.DM_EXEC_REQUESTS.SESSION_ID,TEXT AS '执行SQL',CLIENT_NET_ADDRESS AS '请求IP',SYS.DM_EXEC_CONN ...

  8. python 获取网页图片

    re为正则表达式模组 re.findall在字符串中查找所有匹配的模式,返回一个list urllib2提供了使用简单的url工具 urllib2.urlopen发送url请求,返回一个文件流 imp ...

  9. bzoj1717: [Usaco2006 Dec]Milk Patterns 产奶的模式(后缀数组+二分)

    /* 求可重叠的至少重复K次的最长字串 以1为下标起点,因为a[i]最大到1000000,所以要先离散一下 二分长度len 然后O(n)检验 后看h[i]是否有连续的一段h[i]大于len的,并且h[ ...

  10. 使用flex布局通过order控制显示顺序

    整个棋盘是用一个个"+"组成的,共15行15列,所以可以使用一个15X15的二维数组表示,用户下棋的位置用行列位置表示,这样用户下棋的位置所对应的数组元素将由"+&quo ...