DWR(Direct Web Remoting):是一个用于改善web页面与java类交互的远程服务Ajax开源框架,可以帮助开发人员开发包含AJAX技术的网站。简单的理解就是应用DWR可以让Ajax开发变的容易,客户端可以直接使用javascript调用java方法并得到返回值。
DWR基于Ajax开发,使得B/S程序之间有更好的交互性,Ajax的技术原理同样使得异步刷新减少了对服务器和网络的压力。下面我们通过简单的例子帮助理解DWR是如何应用的。
一、下载DWR的安装包,拷贝dwr.jar包到lib目录下。
二、在web.xml文件中对 dwr Servlet进行配置。
<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> <!-- 新加coRSSDomainSessionSecurity参数--> <init-param> <param-name>crossDomainSessionSecurity</param-name> <param-value>false</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dwr-invoker</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping>
三、在WEB-INF下面拷贝一个dwr.xml配置文件:
<dwr> <allow> <create creator="new" javascript="T1"> <param name="class" value="com.bjsxt.dwrtest.Test1"/> </create> </allow> </dwr>
其中<allow>标签表示可以暴露给javascript可以访问的东西。<create>标签中指定javascript中可以访问的java类名,并定义DWR应当如何获得要进行远程的类的实例,creator=”new”指定java类实例的生成方式,new意味着DWR应当调用类的默认构造函数来获得实例,其他的还有spring方式,通过与IOC容器Spring进行集成来获得实例等等。javascript=" T1 "属性指定javascript代码访问对象时使用的名称。
四、编写java的源代码:
package com.bjsxt.dwrtest; public class Test1 { public String hello(){ return "世界,你好!"; } }
首先需要引入dwr的脚本文件:
<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/T1.js"></script>这个是我们手动编写然后导入的脚本文件,其中T1就是我们在dwr中定义的javascript的名字。注意这两个名字一定要一致,否则会找不到我们的脚本文件。
然后编写javascript的脚本代码:
<script type="text/javascript"> function test1(){ T1.hello( helloreturn ); } function helloreturn(value){ alert(value); } </script>
其中其中helloreturn就是一个回调函数,实际就是将返回值付给了这个函数。
然后响应javascript函数即可:<input type="button" value="测试" onclick="test1()">。这样我们就简单的完成了一个DWR的应用,当然,这种技术的强大还不只这一点,我们不仅可以采用多种定义处理函数的方法处理DWR的返回值,还可以传递参数,处理返回的数组、List集合和map类型,而且还可以通过el表达式获取页面元素的值。
例如页面传递参数:
name: <input type="text" name="name"> <br> permission: <input type="text" name="permission"> <br> <input type="button" value="测试是否有权限" onclick="test1()"><br> <input type="checkBox" name="hp">拥有权限
<script type="text/javascript"> function test1(){ T7.hasPermission( $("name").value,$("permission").value,function(datas){ $("hp").checked=datas; } ); } </script>
DWR基于Ajax技术,对于Ajax中最核心的异步处理也是支持的,DWR默认情况下以异步的方式向后台发出请求,可以通过dwr.engine.setAsync(false)设置为同步方式。
原文链接:https://www.f2er.com/ajax/163766.html