dwr
一:基本步骤: 1.为工程添加jar包:dwr.jar common-logging.jar 如果本工程使用struts,则struts内置了common-logging.jar,不需要重复引入 2.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> </servlet> <servlet-mapping> <servlet-name>dwr-invoker</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping> 注意: <init-param> <param-name>debug</param-name> <param-value>true</param-value> </init-param> 该配置项是开启dwr控制台的开关,如果该项为false,则dwr控制台失效. 3.在/WEB-INF下建立dwr.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.ltd.uk/dwr/dwr20.dtd"> <dwr> <allow> <create creator="new" javascript="test"> <param name="class" value="test.TestDao" /> </create> <!-- 如果需要实体类,则需要配置为如下 match:类路径 converter="bean":固定参数 --> <convert match="bean.*" converter="bean"></convert> </allow> </dwr> 注意:creator="new" 代表本类的创建方式 javascript="test" 代表本类在javascript中的名称 name="class" 代表把某个类配置到dwr中 value="":代表类路径 4.建立相关的类: package test; public class TestDao { public void hello(){ System.out.println("Hello JavaScript . . ."); } public void sayHello(String name){ System.out.println("Hello " + name); } public int add(int a , int b){ return a+b; } } 5.把工程部署到tomcat中,通过下列地址测试dwr环境是否完成: http://ip:port/appName/dwr 如果看到控制台,点击进入,测试方法是否可以正常运行 6.在需要调用dwr相关资源的页面中,按照控制台的提示cope资源: <script type='text/javascript' src='${pageContext.request.contextPath }/dwr/interface/test.js'></script> <script type='text/javascript' src='${pageContext.request.contextPath }/dwr/engine.js'></script> 7.调用dwr资源的脚本写法: dwr名称.方法名称(参数... ,{ callback:function(返回值){ 处理返回的逻辑块 } }) 例如: test.hello(); test.sayHello("诡异小孩"); test.add(10,10,{ callback:function(data){ alert(data); } }); test.add(10,10,callback); function callback(data){ alert(data); } 二:基本应用: 返回数据解析: 1.简单对象: test.getTest({ callback:function(data){ alert(data.id+":"+data.name+":"+data.age+":"+data.sex+":"+data.birthday); } }); 2.简单列表: test.queryForList({ callback:function(data){ for(var i=0;i<data.length;i++){ alert(data[i]); } } }); 3.对象列表: test.queryAll({ callback:function(data){ for(var i=0;i<data.length;i++){ alert(data[i].id+":"+data[i].name+":"+data[i].age+":"+data[i].sex+":"+data[i].birthday); } } }); 4.向后台传对象: var myObject={'id':108,'name':'小 白','age':24,'sex':'女','birthday':'1989-11-01'}; test.setObject(myObject); 参数解析: preHook:交互结束之前执行 callback:交互结束之后返回 postHook:在返回结束之后执行 timeout:设置响应超时时间 errorHandler:设置异常捕获 test.query({ callback:function(data){alert("处理返回"+data);}, preHook:function(){alert("返回之前...");}, timeout:4000, errorHandler:function(msg){alert("如果响应时间超过timeout的值,则服务器超时...");} });
哗众取宠,只会迷失自我 ...