DWR的基本使用

来源:互联网 发布:网络爬虫全解析 pdf 编辑:程序博客网 时间:2024/06/10 02:08

文章主要内容:

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

<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的配置就完成了。现在创建的项目是一个很简单的样例。实现的功能就是,

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

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

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


1 0