当前位置: 代码迷 >> Web前端 >> DWR的施用
  详细解决方案

DWR的施用

热度:102   发布时间:2012-10-17 10:25:47.0
DWR的使用

刚做一个项目用到了dwr这个技术。来跟大家分享一下

dwr的作用是反向ajax的推技术。主要实现就是即时的提醒。可以用来做流程的审批,在线的提醒等功能。

首先进行准备工作

1.搭好一个框架。实现登陆就可以。我用的是S2SH框架进行测试的。

2.搭好框架之后,加入dwr.jar包。进行dwr.xml的配置

?

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

?? ? ? ?<convert converter="bean" match="com.test.model.User"/> ?

?? ? ? ?<create creator="new" javascript="MessageManager"> ?

?? ? ? ? ? ? <param name="class" value="com.test.util.MessageManager"/> ?

?? ? ? ?</create> ?

?? ?</allow> ?

</dwr>?

这个配置文件中,User是我用户实体类,MessageManager是用来做提醒控制的工具类,可以在JS里调用MessageManager里的方法,来实现即时提醒功能、

?

3.页面上需要添加的JS

dwr/interface/MessageManager.js

dwr/engine.js

dwr/util.js

js/messageInfo.js // 用来弹出提醒框

js/chat.js

function login() {

var userid = $("#userid").val();//页面是用jstl写一个hidden的input进行存放登陆人ID

/* 把登陆人ID传入java类中,当作KEY来存放进MAP */

MessageManager.sysUsersList(userid, true, function(data) {

}); ?

} ??

/** ?

* 页面初始化 ?

*/?

function init() {?

dwr.engine.setActiveReverseAjax(true); // 激活反转 必须重要

login();

} ??

window.onload = init;//页面加载完毕后执行初始化方法init

4.web.xml里的配置 ?很重要。配置不好,会无法弹出提醒框,或者反映迟缓

web.xml中配置 很重要

<!-- DWR2配置 -->

<servlet>

<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>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>100</param-value>

</init-param>

<load-on-startup>4</load-on-startup>

</servlet>

<servlet-mapping>

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

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

</servlet-mapping>

配置基本就结束了,然后我说一下我对dwr的理解。

?dwr主要就是内部实现了通过JS访问java实体类。在messageManager里需要一个MAP,我们可以当他是一个容器。当每个用户登陆的时候,可以会把ID,和当前登陆页面的sessionScript当作一个键值对存放入MAP中。然后前台添加消息时,可以在JS里调用MessgerManager中的一个发送方法进行提醒,发送方法中主要是实现取到接收人的ID,然后从MAP中把发送人的sessionScript取出,如果存在,就可以对那个页面进行弹出的操作。

弹出框的操作Util util = new Util(scriptSession);

?? ? ?? ? ? ? ? ?util.addFunctionCall("showdiv","messageDiv",210,126,"您有新消息","新消息",msg);这样实现。dwr内部封装的方法,showdiv,messageDiv是在messageinfo.js里的一个显示方法,两个数字是长宽,一个大标题,一个小标题,msg是显示内容。

?

主要就是登陆时把类似页面对象的东西存起来,这个页面可以进行弹出操作。当进行发送消息这样的操作时,在JS里执行下后台的发送方法。取出存好的页面对象,完成发送。

?

?

把messageinfo.png改成messageinfo.js ? chat.png改为chat.js ? MessageManager.png改为MessageManager.java  文件传不上来。。杯具


1 楼 sunlifei 2011-08-25  
俺觉得你这篇博客写的相当的好啊 支持了 学习了~~
  相关解决方案