dwr(Direct Web Remoting)是一个WEB远程调用框架.利用DWR可以在客户端利用javascript直接调用服务端的java方法,并返回值给javascript.
原理:DWR通过反射,将java翻译成javascript,然后利用回调机制,轻松实现了javascript调用java代码。
配置及使用步骤:
1. 在项目中引入dwr.jar,在web.xml文件中配置DwrServlet
2. 创建java类,编写业务代码.该代码和dwr无关,就是普通的java类
3. 配置dwr.xml文件 通过配置告诉DWR哪些类的哪些方法需要暴露给前台使用,当DWR启动时根据dwr.xml这个文件把java类中的方法转成js中可用的类中的方法,使前台可以使用。
4. 在web页面中编写javascript方法,调用业务逻辑方法
5. 执行过程中,程序将执行结果利用回调函数返回。在回调函数中,得到执行结果后,可以继续编写业务逻辑的相关javascript代码。
代码实例:
1. 在web.xml中配置DwrServlet
<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>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>
2. 创建java类,编写业务逻辑
public class DWRTest { public String hello(){ return "Hello World"; } }
3. 配置dwr.xml
dwr.xml放在web-inf目录下。
第一种写法是调用spring bean,第二种写法是调用普通的java类。
<allow>标签中包括可以暴露给javascript访问的东西。
<create>标签中指定javascript中可以访问的java类,并定义DWR应当如何获得要进行远程的类的实例。creator="new"属性指定java类实例的生成方式,new意味着DWR应当调用类的默认构造函数来获得实例,其他的还有spring方式,通过与IOC容器Spring进行集成来获得实例等等。javascript=" testClass "属性指定javascript代码访问对象时使用的名称。
<param>标签指定要公开给javascript的java类名。
<include>标签指定要公开给javascript的方法。不指定的话就公开所有方法。
<exclude>标签指定要防止被访问的方法。
<dwr> <allow> <!-- javascript="在javascript中要用的类名" value="spring配置文件中DWRTest类对应的id"--> <!-- <create creator="spring" javascript="dwrTest"> <param name="beanName" value="dwrTest"/> </create> --> <!-- javascript="在javascript中要用的类名" value="被调用的java类的完整路径"--> <create creator="new" javascript="DWRTest"> <param name="class" value="com.tgb.DWRTest"/> </create> </allow> </dwr>
其中DWRTest.js是dwr根据配置文件自动生成的,engine.js和util.js是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/DWRTest.js"></script> <script type="text/javascript"> //java方法的javascript函数 functiontest1(){ DWRTest.hello( helloreturn ); } //接收返回值的回调函数 function helloreturn(value){ //value接收方法的返回值,可以在这个回调函数里对返回值进行处理--> alert(value); } //或者采用第二种写法,将回调函数放到javascript函数内部 //function test1(){ // DWRTest.hello( // function(data){ // alert(data); // } // ); // } </script> <body> <input type="button" value="hello" onclick="test1()"> </body>原文链接:https://www.f2er.com/ajax/166666.html