这里是普通文章模块栏目内容页
DWR-应用于JAVA的AJAX框架

DWR:是java的AJAX,它用来完成服务器上的bean对象与和客户端上的js对象的交互,可认为:dwr提供了用js操作java类对象的方式!!!
应用流程如下:
1,下载jar包放在web-inf 下的 lib中,同时注意dwr 需要commons-logging.包的支持,项目中也要有此包
2,编辑配置文件-web.xml
加入如下代码:
<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>
//这就为查看自动生成的映射文件 http://localhost:8080/lj/dwr/ 打下基础,
// 并且在页面中<script type=’text/javascript’ src=’/dwr/util.js’></script>时就会调用dwr这个servlet,完成功能。
注:DWR执行流程:
页面调用JLogin.checkLogin 之类的方法,会将其转到XMLHttpRequest,以get或post发送,当然地址中会用/dwr,
以让服务器接收时转到在web.xml中定义的servlet,这个servlet就会将传来的方法转到java方法调用,之后得用
XMLHttpRequest的回调函数传回数据
DWR:从事的就是javascript语法与java语法的转换工作。
3,在与web.xml同一目录下建立dwr.xml文件
<!DOCTYPE dwr PUBLIC
“-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN”
“http://getahead.org/dwr/dwr20.dtd”>
<dwr>
<allow>//标签中包括可以暴露给javascript访问的东西。
<create creator=”new” javascript=”JDate”>
<param name=”class” value=”java.util.Date”/>
<include method=”checkLogin”/>
</create>
<create creator=”new” javascript=”Demo”>
<param name=”class” value=”your.java.Bean”/>
</create>
<convert converter=”bean” match=”com.lvjian.User”>
<param name=”include” value=”user” />
</convert>
</allow>
</dwr>
注:(1)creator=”new”代表用无参构造器来创建对象 ,也可用spring,由spring代理类的生命周期的管理
(2)javascript=”JDate” 指定在js中应用对象时的名称
(3)<param name=”class” value=”java.util.Date”/> 指定js对象JDate对应的java类
(4) <include method=”checkLogin”/> 指定公开给javascript的方法。不指定的话就公开所有方法。
对应有:<exclude>标签指定要防止被访问的方法。
(5)<convert>: <creator>标签负责公开用于Web远程的类和类的方法,<convertor>标签则负责这些方法
的参数和返回类型。
convert元素的作用是告诉DWR在服务器端Java对象表示和序列化的JavaScript之间如何转换数据类型。DWR自动地在Java和JavaScript
表示之间调整简单数据类型。这些类型包括Java原生类型和它们各自的封装类表示,还有String、Date、
数组和集合类型。DWR也能把JavaBean转换成JavaScript表示,但是出于安全性的原因,
要求显式的配置,
<convertor>标签就是完成此功能的。converter=”bean”属性指定转换的方式采用JavaBean命名规范,
match=”"com.dwr.TestBean”属性指定要转换的javabean名称,<param>标签指定要转换的JavaBean属性。
若参数是集合类型,且其中的元素是自定义元素,那么就要用如下方式指定:
<dwr>
<allow>
<create creator=”new” javascript=”testClass” >
<param name=”class” value= “com.dwr.TestClass” />
<include method=”testMethod7″/>
</create>
<convert converter=”bean” match= “com.dwr.TestBean “>
<param name=”include” value=”username,password” />
</convert>
</allow>
<signatures>
<![CDATA[
import java.util.List;
import com.dwr.TestClass;
import com.dwr.TestBean;
TestClass.testMethod7(List<TestBean>);
]]>
</signatures>
</dwr>
<signatures>标签是用来声明java方法中List、Set或者Map参数所包含的确切类,以便java代码作出判断
注:上述方式完成了js与java类对象的映射,在java类中定义方法时要注意两点:
(1)因js中delete为其关键字,故在java类在定义方法时不能指定delete方法。
(2)因js不支持重载方法,故其对应的类中不能有重载方法,不然在应用中调用的总会是重载方法中的最后一个方法
4,查看DWR自动生成的映射文件 http://localhost:8080/lj/dwr/,其中如下代码要包含在jsp文件中,
<script type=’text/javascript’ src=’/dwr/interface/JLogin.js’></script>
<script type=’text/javascript’ src=’/dwr/engine.js’></script>
<script type=’text/javascript’ src=’/dwr/util.js’></script>
5,应用:编写js文件,调用即可
(1) jsp:
包含的js文件:
<script type=’text/javascript’ src=’/dwr/interface/JLogin.js’></script>
<script type=’text/javascript’ src=’/dwr/engine.js’></script>
<script type=’text/javascript’ src=’/dwr/util.js’></script>
<script type=’text/javascript’ src=’js/login.js’></script>//用来处理
调用:
<input type=”text” name=”userName” id=”userName” value=”goodday” onblur=”check()”>//check来自login.js
<span id=”demoReply” style=”background:#eeffdd; padding-left:4px; padding-right:4px;”>&nbsp;</span>
(2) login.js如下:
function check(){
var name = dwr.util.getValue(“userName”);
JLogin.checkLogin(name, function(data) {
dwr.util.setValue(“demoReply”, data);
});
}
JLogin.checkLogin(name, function(data)) :
调用Login.checkLogin(name), 当结果返回时用data接收,并调用其后的方法(回调函数)
可以是:(1) JLogin.checkLogin(name, function(data))
(2) JLogin.checkLogin(name, myCallBack)
(3) JLogin.checkLogin(42, {
callback:myCallBack
});
第三种方式不仅易读,并且也可指定超时参数,及异常处理函数
JLogin.checkLogin(42, {
callback:myCallBack,
timeout:5000,
errorHandler:function(message) { alert(“Oops: ” + message); }
});
注:在js中创建对象并传递给java的方法:
(1) var p = {
name:”Fred Bloggs”,
age:42,
appointments:[ new Date(), new Date("1 Jan 2008") ]
};
JLogin.checkLogin(p, myCallBack)那么在类的checkLogin参数须是一个类对象来接收封装而来的数据
(2) 带集合且集合元素都是自定义类
data = [
{
username:"user1",
password:"password2"//第一个对象
},
{
username:"user2",
password:" password2"//第二个对象
}
];
JLogin.checkLogin(p, myCallBack)那么在类的checkLogin参数须是一个类对象来接收封装而来的数据
6, 在js中访问java对象
JLogin.checkLogin(name, function(data))
(1)data为基型,直接操作
(2) data为一自定义对象, (在web.xml中配置<conventor>)
for(var property in data){
alert(“property:”+property);
alert(property+”:”+data[property]);//或data.username
}
7,dwr.util
(1)获取及设置页面元素value
1) $()注:$ = document.getElementById
即:var user = $(‘admin.accounts’).value等同于 var user = document.getElementById(‘admin.accounts’).value
2)DWRUtil.getValue(id) 可以根据id取得value,使用这个方法,你不必在意div和select list的不同。
3)DWRUtil.getValues() 这个方法和getValue()一样,只是它传入的是一个包含名字和数值的javascript对象.这个名字就
是HTML元素的ID。这个方法不会返回任何对象,它只会将ID的value映射给传入的value。例:
4)DWRUtil.setValue(id, value) 用ID找到元素,并更新value
5)DWRUtil.setValues() 和setValue(id,value)一样,只是它需要的参数是个javascript对象
(2)操作页面元素
addRows()和removeAllRows()用于编辑tables。
addOptions()和removeAllOptions()用于编辑lists(如:select lists、ul、ol)。
DWR:是java的AJAX,它用来完成服务器上的bean对象与和客户端上的js对象的交互,可认为:dwr提供了用js操作java类对象的方式!!!
应用流程如下:
1,下载jar包放在web-inf 下的 lib中,同时注意dwr 需要commons-logging.包的支持,项目中也要有此包
2,编辑配置文件-web.xml
加入如下代码:
<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>
//这就为查看自动生成的映射文件 http://localhost:8080/lj/dwr/ 打下基础,
// 并且在页面中<script type=’text/javascript’ src=’/dwr/util.js’></script>时就会调用dwr这个servlet,完成功能。
注:DWR执行流程:
页面调用JLogin.checkLogin 之类的方法,会将其转到XMLHttpRequest,以get或post发送,当然地址中会用/dwr,以让服务器接收时
转到在web.xml中定义的servlet,这个servlet就会将传来的方法转到java方法调用,之后得用XMLHttpRequest的回调函数传回数据
DWR:从事的就是javascript语法与java语法的转换工作。
3,在与web.xml同一目录下建立dwr.xml文件
<!DOCTYPE dwr PUBLIC
“-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN”
“http://getahead.org/dwr/dwr20.dtd”>
<dwr>
<allow>//标签中包括可以暴露给javascript访问的东西。
<create creator=”new” javascript=”JDate”>
<param name=”class” value=”java.util.Date”/>
<include method=”checkLogin”/>
</create>
<create creator=”new” javascript=”Demo”>
<param name=”class” value=”your.java.Bean”/>
</create>
<convert converter=”bean” match=”com.lvjian.User”>
<param name=”include” value=”user” />
</convert>
</allow>
</dwr>
注:(1)creator=”new”代表用无参构造器来创建对象 ,也可用spring,由spring代理类的生命周期的管理
(2)javascript=”JDate” 指定在js中应用对象时的名称
(3)<param name=”class” value=”java.util.Date”/> 指定js对象JDate对应的java类
(4) <include method=”checkLogin”/> 指定公开给javascript的方法。不指定的话就公开所有方法。
对应有:<exclude>标签指定要防止被访问的方法。
(5)<convert>: <creator>标签负责公开用于Web远程的类和类的方法,<convertor>标签则负责
这些方法的参数和返回类型。convert元素的作用是告诉DWR在服务器端Java对象表示和序列化的JavaScript
之间如何转换数据类型。DWR自动地在Java和JavaScript表示之间调整简单数据类型。这些类型包括Java原生类型
和它们各自的封装类表示,还有String、Date、数组和集合类型。
DWR也能把JavaBean转换成JavaScript表示,但是出于安全性的原因,要求显式的配置,
<convertor>标签就是完成此功能的。converter=”bean”属性指定转换的方式采用JavaBean命名规范,
match=”"com.dwr.TestBean”属性指定要转换的javabean名称,<param>标签指定要转换的JavaBean属性。
若参数是集合类型,且其中的元素是自定义元素,那么就要用如下方式指定:
<dwr>
<allow>
<create creator=”new” javascript=”testClass” >
<param name=”class” value= “com.dwr.TestClass” />
<include method=”testMethod7″/>
</create>
<convert converter=”bean” match= “com.dwr.TestBean “>
<param name=”include” value=”username,password” />
</convert>
</allow>
<signatures>
<![CDATA[
import java.util.List;
import com.dwr.TestClass;
import com.dwr.TestBean;
TestClass.testMethod7(List<TestBean>);
]]>
</signatures>
</dwr>
<signatures>标签是用来声明java方法中List、Set或者Map参数所包含的确切类,以便java代码作出判断
注:上述方式完成了js与java类对象的映射,在java类中定义方法时要注意两点:
(1)因js中delete为其关键字,故在java类在定义方法时不能指定delete方法。
(2)因js不支持重载方法,故其对应的类中不能有重载方法,不然在应用中调用的总会是重载方法中的最后一个方法
4,查看DWR自动生成的映射文件 http://localhost:8080/lj/dwr/,其中如下代码要包含在jsp文件中,
<script type=’text/javascript’ src=’/dwr/interface/JLogin.js’></script>
<script type=’text/javascript’ src=’/dwr/engine.js’></script>
<script type=’text/javascript’ src=’/dwr/util.js’></script>
5,应用:编写js文件,调用即可
(1) jsp:
包含的js文件:
<script type=’text/javascript’ src=’/dwr/interface/JLogin.js’></script>
<script type=’text/javascript’ src=’/dwr/engine.js’></script>
<script type=’text/javascript’ src=’/dwr/util.js’></script>
<script type=’text/javascript’ src=’js/login.js’></script>//用来处理
调用:
<input type=”text” name=”userName” id=”userName” value=”goodday” onblur=”check()”>//check来自login.js
<span id=”demoReply” style=”background:#eeffdd; padding-left:4px; padding-right:4px;”>&nbsp;</span>
(2) login.js如下:
function check(){
var name = dwr.util.getValue(“userName”);
JLogin.checkLogin(name, function(data) {
dwr.util.setValue(“demoReply”, data);
});
}
JLogin.checkLogin(name, function(data)) :
调用Login.checkLogin(name), 当结果返回时用data接收,并调用其后的方法(回调函数)
可以是:(1) JLogin.checkLogin(name, function(data))
(2) JLogin.checkLogin(name, myCallBack)
(3) JLogin.checkLogin(42, {
callback:myCallBack
});
第三种方式不仅易读,并且也可指定超时参数,及异常处理函数
JLogin.checkLogin(42, {
callback:myCallBack,
timeout:5000,
errorHandler:function(message) { alert(“Oops: ” + message); }
});
注:在js中创建对象并传递给java的方法:
(1) var p = {
name:”Fred Bloggs”,
age:42,
appointments:[ new Date(), new Date("1 Jan 2008") ]
};
JLogin.checkLogin(p, myCallBack)那么在类的checkLogin参数须是一个类对象来接收封装而来的数据(2) 带集合且集合元素都是自定义类
data = [
{
username:"user1",
password:"password2"//第一个对象
},
{
username:"user2",
password:" password2"//第二个对象
}
];
JLogin.checkLogin(p, myCallBack)那么在类的checkLogin参数须是一个类对象来接收封装而来的数据
6, 在js中访问java对象
JLogin.checkLogin(name, function(data))
(1)data为基型,直接操作
(2) data为一自定义对象, (在web.xml中配置<conventor>)
for(var property in data){
alert(“property:”+property);
alert(property+”:”+data[property]);//或data.username
}
7,dwr.util
(1)获取及设置页面元素value
1) $()注:$ = document.getElementById
即:var user = $(‘admin.accounts’).value等同于 var user = document.getElementById(‘admin.accounts’).value
2)DWRUtil.getValue(id) 可以根据id取得value,使用这个方法,你不必在意div和select list的不同。
3)DWRUtil.getValues() 这个方法和getValue()一样,只是它传入的是一个包含名字和数值的javascript对象.这个名字就
是HTML元素的ID。这个方法不会返回任何对象,它只会将ID的value映射给传入的value。例:
4)DWRUtil.setValue(id, value) 用ID找到元素,并更新value
5)DWRUtil.setValues() 和setValue(id,value)一样,只是它需要的参数是个javascript对象
(2)操作页面元素
addRows()和removeAllRows()用于编辑tables。
addOptions()和removeAllOptions()用于编辑lists(如:select lists、ul、ol)。