DWR(Direct Web Remoting)是一个WEB远程调用框架.利用这个框架可以让AJAX开发变得很简单.利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给JavaScript就好像直接本地客户端调用一样(DWR根据Java类来动态生成JavaScrip代码).它的最新版本DWR0.6添加许多特性如:支持Dom Trees的自动配置,支持Spring(JavaScript远程调用spring bean),更好浏览器支持,还支持一个可选的commons-logging日记操作.
DWR的设计构思很是巧妙。
第一、把java类转化为javascript类由dwr自动完成,只需简单的配置。
第二、应用起来极其简单。开发者不要该服务器代码就可以集成。
第三、容易测试。和webwork一样,隐藏的http协议。
第四、及强扩展性。例如与spring集成,只需修改一点代码。
第五、性能。就我与jason,等简单比较,dwr性能可能是最好的。
第六、自动把java对象转化为javascript对象,并且及易扩展
dwr一般都是异步调用,然后在回调函数里面设置相关的参数方法。可是我们有的时候往往需要调用JS函数的时候得到返回值,那么DWR中怎样设置成同步调用模式呢?下面的例子可以给你很好的注解。例子:
function getValidCode(){
//优化取值方式,2007-11-29
var _data = "";
//设置成同步
DWREngine.setAsync(false);
//对返回参数进行赋值
sessionUtil.getCurrVaildCode(function(data){_data = data;});
//重新设置为异步方式
DWREngine.setAsync(true);
//返回值
return _data;
}
--------------------------------------------------------------------------------
DWR 下拉选择框实例下面以一个省市联动的例子来说明。
1.首先需要JAVA类中实现取数据的方法。下面在ItemsBean.java类实现了两个方法,一个是取省列表的,一个取市列表的。返回值都是MAP。
/**
* 得到省份列表
* @param request
* @return
*/
public Map provList(HttpServletRequest request) {
Map reply = new LinkedHashMap();
//取省份列表
String[][] provStr = SelectControl.getSelectOption(
SelectControl.CODE_PROVINCE, 0, request);
if (provStr != null && provStr.length > 0) {
for (int i = 0; i < provStr.length; i++) {
if (i == 0) {
strProvId = provStr[i][1];
}
reply.put(provStr[i][1], provStr[i][0]);
}
}
return reply;
}
/**
* 得到城市列表
* @param provId
* @param request
* @return
*/
public Map cityList(String provId, HttpServletRequest request) {
Map reply = new LinkedHashMap();
if (provId == null || provId.equals("") || provId.equals("0")) {
if(strProvId == null) getDefaultPorvId();
provId = strProvId;
}
//这里根据省份ID取城市列表
String[][] provStr = SelectControl.getSelectOption(
SelectControl.CODE_CITY, provId, request);
if (provStr != null && provStr.length > 0) {
for (int i = 0; i < provStr.length; i++) {
reply.put(provStr[i][1], provStr[i][0]);
}
}
return reply;
}
2.然后在DWR配置文件中配置如下:
<create creator="new" javascript="ItemsBean">
<param name="class" value="com.asiainfo.gp.bean.ItemsBean"/>
</create>
3.在JSP页面首先引入:
<script src="/webroot/dwr/interface/ItemsBean.js"></script>
<script src="/webroot/dwr/engine.js"></script>
<script src="/webroot/dwr/util.js"></script>
页面的JS代码:
//得到省份列表的function
function getProvList()
{
ItemsBean.provList(createProvList); //调用JAVA类中的provList方法
}
//回调函数
function createProvList(data)
{
DWRUtil.removeAllOptions("provid"); //清除原来的数据
DWRUtil.addOptions("provid", data); //省份下拉框中填入省份数据
if(defaultProvid != null && defaultProvid != "" && defaultProvid != "0")
DWRUtil.setValue('provid', defaultProvid);//设置默认的省份值
}
//得到城市列表的funtion
function getCityList()
{
var provid = DWRUtil.getValue("provid");
if(provid == null || provid == "")
provid = defaultProvid;//取选中的省份ID
ItemsBean.cityList(provid, createCityList); //根据省份ID取城市列表
}
//回调函数
function createCityList(data)
{
DWRUtil.removeAllOptions("cityid"); //清除下拉框中原有的城市数据
DWRUtil.addOptions("cityid", data); //城市下拉框中天数城市数据
}
页面的下拉框写法:
<tr>
<td class="info_title">
公司所在省份
</td>
<td class="info_message">
<select name="provCode" id="provid" onchange="javascript:update2();"></select>
</td>
<td class="info_title">
公司所在地市
</td>
<td class="info_message">
<select name="cityId" id="cityid"></select>
</td>
</tr>
--------------------------------------------------------------------------------
现象: DWR 在TOMCAT5.5.20上可以正常运行,而在TOMCAT5.0.30上提示以下错误: DefaultConfiguration.info(51) | Creator 'pageflow' not loaded due to ClassNotFoundException. This is only an problem if you wanted to use it. Cause: Beehive/Weblogic Creator not available.
处理方法: 1) put the xalan.jar in the endorsed folder for tomcat 2) use the following jvm args: -Djavax.xml.transform.TransformerFactory=com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl
--------------------------------------------------------------------------------
ransformerFactoryConfigurationError 这个问题的现象是在启动有DWR的Web应用时出现如下stack trace:
root cause
javax.xml.transform.TransformerFactoryConfigurationError:
Provider org.apache.xalan.processor.TransformerFactoryImpl not found
javax.xml.transform.TransformerFactory.newInstance(Unknown Source)
这个问题和DWR没有什么关系,那是因为Tomcat没有配置好。比较简单的解决办法是下载Xalan替换掉$TOMCAT-HOME/common/lib目录下的xalan.jar文件。DWR2.0能更好的处理这个问题,但是本质的问题还是因为DWR的XML序列化需要有XSLT解析器的支持。
如果你用JDK5还是有这个问题的话,你可以增加以下VM参数来使Tomcat正常工作。
-Djavax.xml.transform.TransformerFactory=
com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl
分享到:
相关推荐
介绍ajax技术和dwr框架,从ajax的requesthttp对象到dwr框架方法,学习就可用,是java应用方面
DWR介绍 DWR原理 DWR开发步骤 dwr.xml说明 DWR核心引擎 DWR工具包
理解DWR(Direct Web Remote)的使用方法 - 请参考《DWR介绍》 理解JSON(JavaScript Object Notation)数据格式 - 可参考http://www.json.org/json-zh.html
它包含两个主要的部分:允许Java从WEB服务器上一个遵循了AJAX原则的Servlet中获取数据.另外一方面一个Java库可以帮助网站开发人员轻松地利用获取的数据来动态改变网页的内容.
适用于java开发者使用。介绍dwr的用法和配置。
dwr介绍,并给出实例
DWR的入门、范例精进、及与不同框架的整合。 对DWR介绍比较详细,适合与初学者。
本书可以当作一本 DWR 完整的教程,也可以当作一本详细介绍 DWR 的“词典”,我 的目的只是通过本书,希望您能够了解一些 DWR 的基本知识、常用的用户界面组件、远程 方法调用等。并能够搭建 DWR 开发环境,实现 DWR...
介绍srping与dwr的集成:系统介绍dwr在spring中的相关配置。
内容丰富 dwr框架详细介绍 讲解浅显易懂 和大家分享一下
难得一见的中文版dwr介绍文档。
基于dwr框架的web应用的设计与使用,是介绍dwr入门的不错的文章。
dwr基础介绍,其中描述介绍了DWR的原理和使用方法,是入门初学者的很好的参考资料
DWR工作原理是通过动态把Java类生成为Javascript。它的代码就像Ajax魔法一样,你感觉调用就像发生在浏览器端,但是实际上代码调用发生在服务器端,DWR负责数据的传递和转换。这种从Java到JavaScript的远程调用功能的...
次压缩包中有源代码,Oracle数据库脚本,DWR 介绍PPT,和事例代码
DWR 是一个开放源码的使用 Apache 许可协议的解决方案,它包含服务器端 Java 库、一个 DWR servlet 以及 JavaScript 库。虽然 DWR 不是 Java 平台上唯一可用的 Ajax-RPC 工具包,但是它是最成熟的,而且提供了许多...
自己总结的一个的dwr的使用说明,附有源码,以及代码的详细解释...同时介绍了与其类似用法的dotnet版本的ajax组建。需要自己下载dwr.jar 3.0版本。或者到我的空间下载dwr.jar 3.0。希望对初学者有用,同时增加的积分。
包含了dwr推送技术的详细介绍 和 一个基于dwr推送技术的聊天实例