DWR的基本使用

文章主要内容:

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

2、服务器推送信息到前台。dwr框架的基本使用方法和配置:1、这个演示项目是使用的struts2+spring3搭建,这里只介绍dwr的环境搭建。2、首先,下载dwr的jar包,点击dwr官网此下载,这里下载的是最新的版本3.0 。
3、在web.xml文件加入以下配置:     
 
	

        dwr-invoker

        
            org.directwebremoting.servlet.DwrServlet
        
		
        
            crossDomainSessionSecurity
            false
         
         
        
          allowScriptTagRemoting
          true
        
        
          classes
          java.lang.Object
        
		
        
            activeReverseAjaxEnabled
            true
        

        
           initApplicationScopeCreatorsAtStartup
           true
        

        
            maxWaitAfterWrite
            3000
        
        
        
            debug
            true
        
        
        
            logLevel
            WARN
        
		
    
    
    
		dwr-invoker
		/dwr/*
	
	
	

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





	
	
		
			
		
	

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

  • 在页面输入一个id,然后再另一个页面输入你刚才的id号和要显示的内容,就可以在刚才输入id的页面显示你输入的内容。
  • 通过定时任务,推送信息到监听的页面。

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

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>




用户页面
  
    
  




	
	

dwr.xml文件:





	
	
		
			
		
	


 
  

其中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 sessions = Browser.getTargetSessions();
				// 遍历每一个ScriptSession
				for (ScriptSession scriptSession : sessions) {
					scriptSession.addScript(script);
				}
			}
		};
		
		// 执行推送
		Browser.withAllSessionsFiltered(filter, run); // 注意这里调用了有filter功能的方法
	}

}

9、上面就是一个简单的例子。完整的代码的下载 链接。


你可能感兴趣的:(项目相关)