您的位置:首页 > 其它

DWR高级主题之反向Ajax(DWR3的comat模式演示1)

2013-09-05 11:27 483 查看
原文/article/8389785.html

DWR高级主题之反向Ajax(DWR3的comat模式演示1)

----------

web.xml

[html] view
plaincopy

<?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>

<!-- 下面是comet模式的反向Ajax所需要的参数 -->

<init-param>

<param-name>activeReverseAjaxEnabled</param-name>

<param-value>true</param-value>

</init-param>

</servlet>

<servlet-mapping>

<servlet-name>dwr-invoker</servlet-name>

<url-pattern>/dwr/*</url-pattern>

</servlet-mapping>

</web-app>

dwr.xml

[html] view
plaincopy

<?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>

java文件

[java] view
plaincopy

package app;

import org.directwebremoting.Browser;

import org.directwebremoting.ScriptSessions;

public class MathDelegate {

private static int num = 1;

/**

* 推送数字到页面上去

*

* @param userid

* @param request

* @return

*/

public void dwrHandle() {

Browser.withAllSessions(new Runnable() {

public void run() {

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

// funA为页面上一个js函数,num++为funA的参数

ScriptSessions.addFunctionCall("funA", num++);

}

});

}

/**

* 触发推送的方式(触发10次),comet方式,有数据的情况下触发推送

*/

public void handle() throws InterruptedException{

int m = 0;

while(m++ < 10){

Thread.sleep(3000);

dwrHandle();

}

}

}

index.html

[html] view
plaincopy

<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);

<!--

//重点关于解决页面每刷新一次会多创建一个新的ScriptSession的解决方法

//由于ScriptSession的创建机制不同于HttpSession,它会在每次页面刷新的时候都会重新创建,而销毁机制却是失去连接

//或者失效之后一定时间才会自动销毁,这样就可能造成服务端可能就保存了很多的无用的ScriptSession,所以不仅仅会影响

//性能问题,更重要的是,可能就不能实现你想要的功能。

//解决方法是在接收消息的页面,也就是你调用dwr.engine.setActiveReverseAjax(true);的页面调用一个dwr的方法。

//dwr.engine.setNotifyServerOnPageUnload(true);

//这个方法的功能就是在销毁或刷新页面时销毁当前ScriptSession,这样就保证了服务端获取的ScriptSession集合中没有

//无效的ScriptSession对象。

-->

dwr.engine.setNotifyServerOnPageUnload(true);

function start(){

MathDelegate.handle();

}

function funA(num){

document.getElementById("resultDiv").innerHTML="<h1>"+num+"</h1>";

}

</script>

</head>

<body>

<hr/>

DWR演示:<br><span id="resultDiv"></span>

<hr/>

<input type="button" value="start" onclick="start();">

</body>

</html>
原文/article/8389785.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: