基于Ajax技术的DWR应用
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 "世界,你好!"; } } 五、编写jsp页面的代码: 首先需要引入dwr的脚本文件: <script type="text/javascript" src="dwr/engine.js"></script> <script type="text/javascript" src="dwr/util.js"></script> 这两个脚本文件是dwr自带的, <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">拥有权限 javascript通过el表达式获取页面元素的值: <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)设置为同步方式。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ruby-on-rails – 无法激活activemodel-3.2.15,因为actives
- cocos2d-x & cocostudio bug记录
- ruby-on-rails – Paperclip :: Errors :: NotIdentifiedBy
- 如果你会oracle+mysql+java+hadoop
- “[ilink32]致命:内存不足”在C Builder中
- ajax – 在tastypie视图中公开“虚拟”字段?
- VB.NET版机房收费系统之限制textbox输入
- 细化解析PostgreSQL的昨天今天和明天
- c# – 在Entity Framework中添加/删除多对多关联
- objective-c – LLDB相当于Xcode中GDB中的’detach’?