本案例主要实现的功能:一个页面发送消息,其它打开本页面的也能收到消息(类似广播功能)
**开发工具:**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