DWR学习(一)使用步骤
|
DWR(direct web remote)直译就是“直接web远程调用”, 是一个基于服务器端的ajax框架。通过该框架,我们可以使用js来直接调用java方法。[c1] <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>
3. 建立java类(普通java类即可,不是servlet)TestClass public class TestClass {
public void testMethod1(){
System.out.println("hello dwr!");
}
public String testMethod2(String name,int a){
return "hello " + name + a;
}
}
4. 在/WEB-INF[p2] /dwr.xml[p3] 中配置java类: <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://www.getahead.ltd.uk/dwr/dwr20.dtd">
<dwr>
<allow>
<create creator="new" javascript="testClass" >
<param name="class" value= "com.dwr.TestClass" />
</create>[p4]
</allow>
</dwr>
注解: 一个<create/>标签对应一个java类的配置,可以是多个。 5. 在dwr.jsp中使用,需要首先引入:(需要保证dwr这个目录位于web应用的根目录) <script src='dwr/interface/testClass.js'></script>
<script src='dwr/engine.js'></script>
<script src='dwr/util.js'></script>
[p5]
注:engine.js和util.js不需要引入,因为在dwr.jar包中已经包含了,dwr默认在WebRoot的根目录下,所以可以通过web.xml中配置的映射名找到,如果你的页面jsp在webRoot的子目录中可以通过../dwr/xxx.js来找到。 6. 在javascript方法中调用后台java类方法: function test() {
testClass.testMethod1();
}
用dwr调用有参数的java方法,有返回值:
function test(){
testClass.javaMethod2("bbb","5",parseInfo[p6] ); //若java方法需要传参,处理响应数据的函数名放到参数列表后面。
//dwr会进行自动类型转换,这些类型都是基本数据类型
}
function parseInfo (data){
document.getElementById("div1").innerHTML=data;
}
DWR调用的简单顺序: 1. js调用相应的方法发送请求。/dwr/td.test1 2. DWRServlet处理相关请求。根据dwr.xml配置内容,调用相应的java类的方法。 3. DWRServlet将处理完的数据返回给客户端。 其他知识点: 1.dwr中的得到request对象: HttpServletRequest req = WebContextFactory.[c7] get().getHttpServletRequest(); 2. javascript顺序执行的问题: function test8(data){ // DWREngine.setAsync(false); //将ajax改成同步方式,可以实现顺序执行。 testClass.testMethod7({ function(a){ alert(a); } }); alert("ttt"); } 4. javabean转化成js中的对象: public Address test6(){
return new Address("中国","北京","海淀区");
}
<convert match="com.pk.beans.Address" converter="bean">
<param name="include" value="country,province" ></param>[c8]
</convert>
td.test6(function(data){
alert(data.country);
});
5. 集合中的对象为javabean时,如何使用: public List test7(){
List list = new ArrayList();
for(int i=0;i<5;i++){
list.add(new Address("中国","北京"+i,"海淀区"));
}
return list;
}
public List test8(){
List list = new ArrayList();
for(int i=0;i<5;i++){
list.add(new User("a",3,new Address("中国","海淀区")));
}
return list;
}
<convert match="com.pk.beans.Address" converter="bean">
<param name="include" value="country,province" ></param>
</convert>
<convert match="com.pk.beans.User" converter="bean">
</convert>
<signatures>
<![CDATA[
import java.util.*;
import com.pk. beans.*;
import com.pk. ajax.TestDwr;
TestDwr.test7(List<Address>);
TestDwr.test8(List<User>);
]]>
</signatures>
[c9]
td.test7(function(data){
alert(data.length);
alert(data[3].province); //dwr中:java的List,Set会自动转化为js中的数组
});
td.test8(function(data){
alert(data[0].addr.country);
alert(data[0].name);
});
[c1]本质上仍然是请求响应模式 [p2]位置 [p3]名字是固定的,必须是:dwr.xml [p4]配置一个类,增加一个create元素就可以了。 [p5]这两个js必须加上。 [p6]通常所调用的java方法返回的是字符串,所以要用parseInfo来获取响应数据 [c7]Dwr1.0引入:uk开头的包。 Dwr2.0引入:org开头的包。 [c8]不写的话,所有属性都转化。 写的话,只转化value指定的属性。 [c9]该元素置于<allow>外,<dwr>中。
转载地址:http://www.webspherechina.net/home/space.php?uid=28038&do=blog&id=51948 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
