简单阐述下DWR框架的运用:
什么是DWR?
DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站。它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一样。
原理
它包含两个主要的部分:允许JavaScript从WEB服务器上一个遵循了AJAX原则的Servlet中获取数据.另外一方面一个JavaScript库可以帮助网站开发人员轻松地利用获取的数据来动态改变网页的内容.
DWR采取了一个类似AJAX的新方法来动态生成基于JAVA类的JavaScript代码。这样WEB开发人员就可以在JavaScript里使用Java代码,就像它们是浏览器的本地代码(客户端代码)一样;但是Java代码运行在WEB服务器端而且可以自由访问WEB 服务器的资源。出于安全的理由,WEB开发者必须适当地配置哪些Java类可以安全的被外部使用。这个从JAVA到JavaScript的远程功能方法给DWR的用户带来非常像传统的RPC机制,就像RMI或者SOAP一样,而且拥有运行在WEB上但是不需要浏览器插件的好处.
DWR不认为浏览器/WEB服务器协议是重要的,而更乐于保证编程界面的简单自然.对此最大的挑战就是把AJAX的异步特性和正常JAVA方法调用的同步特性相结合.在异步模式下,结果数据在开始调用之后的一段时间之后才可以被异步访问获取到.DWR允许WEB开发人员传递一个回调函数,来异步处理Java函数调用过程.
具体编程步骤
step1:从DWR官网下载最新版本的jar包(同时它还依赖commons-logging.jar,将此jar包放到WEB-INF/lib包中)放到WEB-INF/lib包中,
地址:http://directwebremoting.org/dwr/downloads/index.html;
step2:在WEB-INF下配置dwr.xml,具体内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" "http://www.getahead.ltd.uk/dwr/dwr30.dtd">
<dwr>
<!-- 说明:
1、一个allow元素对应一个配置,经DWR编译后生产一个JS文件供调用
2、create元素中,creater="new"表示每调用一次DWRUserAccess时,需要new一个这样的类;
javascript="DWRUserAccess",表示提供给前台页面调用javascirpt文件是DWRUserAccess.js
3、<param name="class" value="test.DWRUserAccess"/> 表示具体的业务实现类
4、convert元素用于数据类型转换,即java类和javascript之间相互转换,因为和前台交换的是User对象,
因此需要对此使用bean转换,如果没有特殊类型转换则不需配置此元素
<allow>
<create creator="new" javascript="DWRUserAccess">
<param name="class" value="test.DWRUserAccess"/>
</create>
<convert converter="bean" match="test.User"/>
</allow>
-->
<allow>
<!-- 用户注册 -->
<create creator="new" javascript="userManager">
<param name="class" value="com.zheng.service.UserService"/>
<include method="saveUser"/>
</create>
</allow>
</dwr>
step3:在WEB-INF下配置web.xml,在里面配置dwr,其他的内容不变
<!-- DWR配置 -->
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
step4:在某个jsp页面运用dwr,内容如下:
<script type="text/javascript" src="js/jquery-1.8.2.min.js" ></script>
<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/userManager.js'> </script>
<script type="text/javascript">
function init(){
//这里的saveUser方法就是UserService类中的saveUser()方法,这样能直接调用
//前提条件是这个web工程已经部署到Web(如Tomcat)容器中了,且容器启动了
userManager.saveUser();
}
</script>
</head>
<body onload="init();">
测试DWR框架的应用
</body>
step5:UserService的java代码如下:
package com.zheng.service;
public class UserService {
public UserService(){System.out.println("Constructors");}
public void saveUser(){
System.out.println("利用DWR调用业务逻辑方法!");
}
}
4.将这个web工程部署到Tomcat容器后,启动容器,浏览器地址栏输入:
http://localhost:8080/TestDwr/index.jsp 按下回车,在myeclipse工具的控制台上显示有
"利用DWR调用业务逻辑方法!"这个内容的话,就表示页面dwr异步调用java中的方法成功了。
注意:dwr可以设置是否采用异步方式访问java代码,其代码为:
dwr.engine.setAsync(false); //false为同步,true(默认)为异步