DWR的基本使用

前端之家收集整理的这篇文章主要介绍了DWR的基本使用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

文章主要内容

1、介绍dwr的基本使用方法和配置。

@H_403_6@<span style="font-size:14px;">2、服务器推送信息到前台。dwr框架的基本使用方法和配置:1、这个演示项目是使用的struts2+spring3搭建,这里只介绍dwr的环境搭建。2、首先,下载dwr的jar包,点击<a target=_blank target="_blank" href="http://http://directwebremoting.org/dwr/">dwr官网</a>此下载,这里下载的是最新的版本3.0 。 3、在web.xml文件加入以下配置: </span> <!--dwr配置开始--> <servlet> <servlet-name>dwr-invoker</servlet-name> <servlet-class> org.directwebremoting.servlet.DwrServlet </servlet-class> <!--是否支持跨域请求--> <init-param> <param-name>crossDomainSessionSecurity</param-name> <param-value>false</param-value> </init-param> <!--页面是否动态加入script标签--> <init-param> <param-name>allowScriptTagRemoting</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>classes</param-name> <param-value>java.lang.Object</param-value> </init-param> <!--开启支持AJAX反转--> <init-param> <param-name>activeReverseAjaxEnabled</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>initApplicationScopeCreatorsAtStartup</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>maxWaitAfterWrite</param-name> <param-value>3000</param-value> </init-param> <!--开启debug模式--> <init-param> <param-name>debug</param-name> <param-value>true</param-value> </init-param> <!--日志级别--> <init-param> <param-name>logLevel</param-name> <param-value>WARN</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dwr-invoker</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping> <!--dwr配置结束-->

4、在和web.xml文件的一级目录下新建一个dwr.xml配置文件,该配置文件是用来配置java代码和js代码的映射关系。具体内容如下:

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

<dwr>
	<!--java代码和js方法的映射-->
	<allow>
		<create creator="new" javascript="pageLoad">
			<param name="class" value="com.strutsSpring.dwr.util.PageLoad" />
		</create>
	</allow>
</dwr>

5、现在dwr的配置就完成了。现在创建的项目是一个很简单的样例。实现的功能就是,

6、功能实现,这里就把和dwr框架的核心代码贴出来。监听页面的程序:

<%@ 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>用户页面</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/pageLoad.js"></script>
<script type="text/javascript" src="/strutsSpring/js/jquery-1.6.4.min.js"></script>
<script type="text/javascript">

dwr.engine._errorHandler = function(message,ex) {dwr.engine._debug("Error: " + ex.name + "," + ex.message,true);};

//通过该方法后台交互,确保推送时能找到指定用户  
function onPageLoad(){  
	var userId = ${userId};
	pageLoad.onPageLoad(userId);  
 }  
 
//推送信息  
function showMessage(autoMessage){  
		alert(autoMessage);
       jQuery("#DemoDiv").append(autoMessage);
}  
</script>
</head>
<body onload="onPageLoad();dwr.engine.setActiveReverseAjax(true);dwr.engine.setNotifyServerOnPageUnload(true);;">
	
	<div id="DemoDiv"></div>
</body>
</html>

dwr.xml文件

<pre name="code" class="html"><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd">

<dwr>
	<!--java代码和js方法的映射-->
	<allow>
		<create creator="new" javascript="pageLoad">
			<param name="class" value="com.strutsSpring.dwr.util.PageLoad" />
		</create>
	</allow>
</dwr>


 
 

其中engine.js、util.js是dwr自带的。pageLoad.js和dwr配置的java类和js相对应前面的路径是固定的。body标签中的方法都是dwr自带的,除了onPageLoad();是实现注册方法。传递一个id。调用的是com.strutsSpring.dwr.util.PageLoad的onPageLoad。showMessage方法提供java调用的js方法

7、下面是PageLoad代码,很简单。就是将前台传入的id方法ScriptSession中。

package com.strutsSpring.dwr.util;

import org.directwebremoting.ScriptSession;
import org.directwebremoting.WebContextFactory;

public class PageLoad {
    public void onPageLoad(final String tag){  
        //获取当前的ScriptSession  
        ScriptSession scriptSession = WebContextFactory.get().getScriptSession();  
        scriptSession.setAttribute( "tag",tag);  
        System. out.println( "setAttribute");  
}  
}

8、java代码调用js的实现方法

package com.strutsSpring.dwr.util;

import java.util.Collection;

import org.directwebremoting.Browser;
import org.directwebremoting.ScriptBuffer;
import org.directwebremoting.ScriptSession;
import org.directwebremoting.ScriptSessionFilter;

public class PageSend {
	/**
	 * 
	 * @param content 发送内容
	 * @param keyId 发给谁
	 */
	public void send(final String content,final String keyId) {

		// 过滤器
		ScriptSessionFilter filter = new ScriptSessionFilter() {

			public boolean match(ScriptSession scriptSession) {
				//从scriptSession中的值取出相应的值和页面传过来的值进行比较
				String tag = (String) scriptSession.getAttribute("tag");
				System.out.println("tag="+tag);
				if(tag==null){
					return false;
				}
				return tag.equals(keyId);
			}
		};

		Runnable run = new Runnable() {
			private ScriptBuffer script = new ScriptBuffer();

			public void run() {
				// 设置要调用的 js及参数
				script.appendCall("showMessage",content);
				// 得到所有ScriptSession
				Collection<ScriptSession> sessions = Browser.getTargetSessions();
				// 遍历每一个ScriptSession
				for (ScriptSession scriptSession : sessions) {
					scriptSession.addScript(script);
				}
			}
		};
		
		// 执行推送
		Browser.withAllSessionsFiltered(filter,run); // 注意这里调用了有filter功能方法
	}

}

9、上面就是一个简单的例子。完整的代码的下载 链接。 原文链接:https://www.f2er.com/ajax/162506.html

猜你在找的Ajax相关文章