dwr3消息推送

本案例主要实现的功能:一个页面发送消息,其它打开本页面的也能收到消息(类似广播功能)
**开发工具:**eclipse, jdk1.7,tomcat7
代码目录截图
这里写图片描述
注:message.java方法为测试用的,忽略
**配置文件:**web.xml ,dwr.xml
web.xml 主要是dwr监听器,reverseAjax等dwr的基础配置(要用直接复制即可)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>dwr_test</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

  <listener>
    <listener-class>org.directwebremoting.servlet.DwrListener</listener-class>
  </listener>

  <servlet>
  <display-name>DWR Servlet</display-name>
  <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>

  <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>dwr-invoker</servlet-name>
  <url-pattern>/dwr/*</url-pattern>
</servlet-mapping>

</web-app>

dwr.xml主要用来配置处理消息的类

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "http://getahead.org/dwr/dwr30.dtd">

<dwr>
    <allow>
    <!-- 配置处理消息的服务类 -->
        <create creator="new" javascript="service">
            <param name="class" value="dwr_test.Service" />
        </create>

    </allow>
</dwr>

**消息处理类:**service.java 主要用来处理消息,以及消息发到哪个页面,页面哪个方法来接收消息

/*package dwr_test;

import org.directwebremoting.Browser;
import org.directwebremoting.ServerContextFactory;
import org.directwebremoting.ui.dwr.Util;

public class service {
    public static void sendMsg(final String msg)
    {
        //针对具体的页面first_test.jsp进行推送
        String page=ServerContextFactory.get().getContextPath()+"/first_test.jsp";
        System.out.println("page:"+page);
        Browser.withPage(page, new Runnable() {
            public void run() {
                //messageid字段是向jsp页面推送时所对应的字段,msg是要推送的消息  
                Util.setValue("messageid", msg);
            }
        });
    }

}
*/

package dwr_test;

import org.directwebremoting.Browser;
import org.directwebremoting.ScriptSessions;
import org.directwebremoting.ServerContextFactory;
import org.directwebremoting.WebContext;
import org.directwebremoting.WebContextFactory;
import org.directwebremoting.ui.dwr.Util;
import java.text.*;
import java.util.*;

public class Service{

    public static void sendMsg(String msg){    

        System.out.println("service----"+msg);
        //要推送到的页面
        String page = ServerContextFactory.get().getContextPath() + "/first_test.jsp";
        System.out.println(page);
        Browser.withPage(page ,new Runnable(){
        public void run(){
            //show为first_test.jsp页面中的方法,页面接收消息的方法
            ScriptSessions.addFunctionCall("show", msg);
        }
    });
    }
}

**接收消息的页面:**first_test.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"  
    pageEncoding="UTF-8"%>  
<!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=UTF-8">  
<title>test dwr</title>
<script type="text/javascript" src="./dwr/engine.js"></script>
<script type="text/javascript" src="./dwr/util.js"></script>
<script type="text/javascript" src="./dwr/interface/service.js"></script>

<script>

    //推送
    function push(){
        var message=document.getElementById("pushMsg").value;
        service.sendMsg(message);//service类中的方法(service为dwr.xml的JavaScript中的名字)
    }

    //页面加载时配置dwr.engine.setActiveReverseAjax(true);以使用反转ajax
    function my_onload() {
        dwr.engine.setActiveReverseAjax(true);
    }

    //自定义的一个方法,用来接收service.java发来的信息
    function show(message) {
        document.getElementById('messageid').value = message;
    }
</script>
</head>
<body onload="my_onload();">
<input type="text" style="width:150px;height:70px " id="pushMsg" placeholder="请输入消息"><br/>
<input type="button" name="aaa" onclick="push()" value="发送">
<br><br>
从服务端得到的消息:<br /> 
<input type="text" style="width:230px" id="messageid" /> 
</body>

注:要引入3个js(dwr必须的,第三个js:service.js为消息处理的js,名字service为dwr.xml配置消息处理类的名,即:javascript=”service”)
效果展示:
这里写图片描述
当在某个first_test.jsp点发送消息时,其他2两个也能接收到发送的消息
其它大神写的代码:
广播:http://www.cnblogs.com/nianzecong/p/3642613.html
精准: http://www.cnblogs.com/nianzecong/p/3647399.html

代码地址:http://download.csdn.net/detail/wu_0916/9749140

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值