DWR高级主题之反向Ajax(轮询模式实例--DWR2.X)
----------
用maven进行构建:
MathDelegate.java
index.html
----------
用maven进行构建:
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>ddddd</groupId>
<artifactId>bbb</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>bbb Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- 必需的依赖 -->
<dependency>
<groupId>org.directwebremoting</groupId>
<artifactId>dwr</artifactId>
<version>3.0.M1</version>
</dependency>
<!-- 必需的依赖 -->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
<build>
<finalName>bbb</finalName>
</build>
</project>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<display-name>firstDWR</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<!-- The DWR Servlet... -->
<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>crossDomainSessionSecurity</param-name>
<param-value>false</param-value>
</init-param>
<!-- 下面轮询模式的反向Ajax所需要的参数 -->
<init-param>
<param-name>activeReverseAjaxEnabled</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>org.directwebremoting.extend.ServerLoadMonitor</param-name>
<param-value>org.directwebremoting.impl.PollingServerLoadMonitor</param-value>
</init-param>
<!-- 我们可以设置轮询的频率为2秒 -->
<init-param>
<param-name>disconnectedTime</param-name>
<param-value>2000</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
</web-app>
<?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="MathDelegate">
<param name="class" value="app.MathDelegate" />
</create>
</allow>
</dwr>
MathDelegate.java
package app;
import java.util.Collection;
import org.directwebremoting.ScriptSession;
import org.directwebremoting.WebContext;
import org.directwebremoting.WebContextFactory;
import org.directwebremoting.proxy.dwr.Util;
public class MathDelegate {
private static int num = 1;
public void dwrHandle() throws InterruptedException{
//这里是获取WebContext上下文
WebContext wctx = WebContextFactory.get();
//从上下文中获取当前页面,这些是DWR的反向Ajax要求的必须方式
String currentPage = wctx.getCurrentPage();
//一个page中可能存在多个ScriptSessions
Collection<ScriptSession> sessions = wctx.getScriptSessionsByPage(currentPage);
//Util是DWR在Server端模拟Browse端dwr.util.js的类(也就是页面上要加入DWR的util.js),Engine也是同样的
Util utilAll = new Util(sessions);
while(true){//其实这里不应该用while(true)死循环,这里只是演示用!应该是有推送的数据了,就调用dwrHandle()
Thread.sleep(3000);
//注意:如果第三个参数设置为true,那么第二个参数会当成纯文本(不解析),否则作为html文本
utilAll.setValue("resultDiv", "<b><h1>" + (num++) +"</h1></b>", false);
}
}
}
index.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
<title>firstdwr</title>
<script type="text/javascript" src="dwr/engine.js"></script>
<!-- 注意:反向Ajax中,util.js是必须包含的 -->
<script type="text/javascript" src="dwr/util.js"></script>
<script type="text/javascript" src="dwr/interface/MathDelegate.js"></script>
<script>
<!-- 轮询模式与comet模式的反向Ajax所需要的配置 -->
dwr.engine.setActiveReverseAjax(true);
function start(){
MathDelegate.dwrHandle();
}
</script>
</head>
<body>
<hr/>
DWR演示:<br><span id="resultDiv"></span>
<hr/>
<input type="button" value="start" οnclick="start();">
</body>
</html>