基于J2EE的ajax之DWR.docx
《基于J2EE的ajax之DWR.docx》由会员分享,可在线阅读,更多相关《基于J2EE的ajax之DWR.docx(18页珍藏版)》请在冰豆网上搜索。
![基于J2EE的ajax之DWR.docx](https://file1.bdocx.com/fileroot1/2023-1/23/34ff4300-68b1-4b9e-9ac6-7b3d21ac370d/34ff4300-68b1-4b9e-9ac6-7b3d21ac370d1.gif)
基于J2EE的ajax之DWR
基于J2EE的Ajax之DWR
一、什么是Ajax及它有什么好处:
1、什么是Ajax:
AJAX并不是一项新的技术,它实际上是几项成熟技术的组合产品,主要用到的技术有JavaScript、DOM、XML、XSLT、XHTML、CSS等
2、优点:
使用Ajax的最大优点,能在不更新整个页面的前提下维护数据,普通页面每点击一个链接,整个页面需要重新刷新一次,Ajax可以实现局部
减轻服务器的负担,因为Ajax的是“按需取数据”,如:
项目里级联菜单的处理就需要此项技术,用户只对菜单中的一部分进行操作的话,那就只读取的数据中的一指定的部分
能够提升用户体验,如下展示例子:
优点展示地址:
http:
//172.16.1.211:
8080/pic/imgSpecs.jsp
总体来讲:
Ajax适用于交互较多,频繁读数据,数据分类良好的WEB应用
二、常见的几种用Ajax实现的WEB项目:
1、地图:
2、网页页面局部刷新部分(如Tabs)
3、大家熟悉的抽奖系统
三、Ajax框架之DWR
1、Ajax目前的框架有很多种,为什么选择DWR?
现在有多种基于Java平台的Ajax-PRC工具包,但DWR是最成熟的,而且提供了能和Java的其它框架配合使用的功能如:
Spring、Jsf、Struts、Pageflow,最新发布的3.0还集合了Dojo框架
2、DWR(DirectWebRemoting)的主要功能:
客户端的JavaScrip可以直接调用远程的Java方法,并得到远程方法的返回值,我个人的理解就是JavaScript与Java通过DWR进行通讯交流(如下图)
Ajax例子展示地址:
http:
//172.16.1.211:
8080/lottery/lottery/index.html
http:
//172.16.1.211:
8080/dwr/index.html
http:
//172.16.1.211:
8080/dwr/dwr/index.html
:
8086/mo/
四、DWR的下载及相关配置
1.下载:
DWR官方网站:
http:
//directwebremoting.org/可以下载最新版
2.安装:
直接将dwr.jar及commons-logging.jar导入lib目录
3.配置:
首先需要在Web.xml文件中加入如下代码:
===================================================================
//配置DWR的核心Servlet
//指定DWR核心Servlet的名称
dwr
//指定DWR的核心Servlet的实现类
uk.ltd.getahead.dwr.DWRServlet
//是否打开DWR的调试状态
debug
true
//指定映射的URL
//指定核心DWRURL
dwr
/dwr/*
===================================================================
然后编写Java程序:
===================================================================
publicStringhello(Stringname){
returnname+",你好!
欢你来到A8...";
}
}
===================================================================
完成后增加一个dwr.xml文件,代码如下:
===================================================================
xmlversion="1.0"encoding="utf-8"?
>
//指定DWR配置文件的DTD信息
DOCTYPEdwrPUBLIC"-//GetAheadLimited//DTDDirectWebRemoting3.0//EN""http:
//getahead.org/dwr//dwr30.dtd">
—DWR配置文件的根元素都是DWR-->
—creator元素决定使用哪种创建器进行调用JavaScript如:
Spring、Struts、jsf,这里我们使用New创建,new代表新建一个JavaScript对象,不和Java的其它框架配合使用-->
//这里的javascript=”a8”代表对应生成的js文件就是a8.js如下图红框处
—使用class属性指定创建该Java实例的实现类-->
—实现a8.HelloA8类所需要的Bean-->
—Bean转换支持通配符”*”代表a8类包下的所有类-->
===================================================================
五、怎样应用到你的Web程序中?
1.在配置完成后DWR会自动生成三个js文件,这三个文件是动态生成的,生成的位置也是变化的,它们的位置会随着Web.xml文件中配置uk.ltd.gatahead.dwr.DWRServlet的URL不同而不同。
2.进入http:
//localhost:
8080/[YOUR-WEBAPP]/然后点击你创建的类,就可以看到生成的JavaScrip方法了,你可以根据实际情况修改/[YOUR-WEBAPP]/部分。
如下例:
这三个JS在引入到Jsp或者HTML中时,第一、二两个是必备的。
第一个JS:
是由dwr.xml文件使用create元素,暴露成JavaScript的实例
第二个JS:
Engine.js文件,DWR的核心,在调用过程中是不可缺少的文件
第三个JS:
Unil.js文件,DWR工具的JavaScript文件,该文件内提供了一些方法,通过这些方法可以简化DOM操作,该文件在引入过程中属于可选引入
3.导入了DWR动态生成的JavaScript脚本,我们就可以使用异步方式来调用这些方法,所谓的异步,就是使用一个回调函数,当调用远程Java方法,总是为该方法增加一个参数,参数列表的最后一个参数就是回调函数,回调函数当服务器响应时自动启动,用于将服务器响应显示在当前页面中,实际上使用回调函数有两种做法:
简单回调和使用JSON格式,简单回调是指,调用远程Java方法时增加一个方法参数,最后一个方法参数是回调函数,假设有如下一个类,该类里仅包含一个简单的hello方法:
===================================================================
//简单的处理类
PublicclassHello{
//仅包含一个简单的hello方法
publicStringhello(Stringname){
returnname+",你好!
欢你来到A8...";
}
}
===================================================================
将其暴露成JavaScript对象(假设被暴露成一个名为a8的JavaScript对象)可
以通过如下代码来使用该对象:
DWR入门—导入DWR的核心JavaScript代码-->
编写:
hellodwr.js
functionhello(){
a8.hello(‘唐伯虎’,function(data){
alert(data);
});
}
或者
functionhello(){
a8.hello(‘唐伯虎’,feedback);
}
functionfeedback(data){
alert(data);
}
其中,’唐伯虎’是传给远程Java方法hello(Stringname)的name参数,feedback则就回调函数。
六、以下提供一个完整的例子,来演示实际过程中的操作:
预览地址:
http:
//172.16.1.211:
8080/dwr/index.html
Java端
===================================================================
HelloA8.java
//简单的处理类
publicclassHelloA8{
publicStringhello(Stringname){
returnname+",你好!
欢你来到A8...";
}
publicStringsendObj(Personp){
returnp.getName()+",您好!
欢你来到A8...";
}
publicPersongetBean(Stringname){
returnnewPerson("服务器端"+name);
}
publicListgetPersonList(){
Listresult=newArrayList();
result.add(newPerson("集合aaaa"));
result.add(newPerson("集合bbbb"));
result.add(newPerson("集合cccc"));
returnresult;
}
publicPerson[]getPersonArray(){
Person[]result=newPerson[3];
result[0]=newPerson("数组aaaa");
result[1]=newPerson("数组bbbb");
result[2]=newPerson("数组cccc");
returnresult;
}
publicMapgetPersonMap(){
Mapresult=newHashMap();
result.put("first",newPerson("Mapaaaa"));
result.put("second",newPerson("Mapbbb"));
result.put("third",newPerson("Mapcccc"));
returnresult;
}
publicStringsendList(Listpl){
Stringresult="";
for(Personp:
pl)
{
result+=p.getName()+"
";
}
returnresult;
}
publicStringsendMap(Mappmap){
Stringresult="";
for(Stringkey:
pmap.keySet())
{
result+="键"+key+"其值为:
"+pmap.get(key).getName()+"
";
}
returnresult;
}
}
===================================================================
Person.java
publicclassPerson
{
privateStringname;
publicPerson(){}
publicPerson(Stringname)
{
this.name=name;
}
publicvoidsetName(Stringname)
{
this.name=name;
}
publicStringgetName()
{
returnname;
}
}
===================================================================
修改web.xml配置
===================================================================
xmlversion="1.0"encoding="UTF-8"?
>
xmlns="
xmlns:
xsi="http:
//www.w3.org/2001/XMLSchema-instance"
xsi:
schemaLocation="
dwr
uk.ltd.getahead.dwr.DWRServlet
debug
true
--指定核心Servlet的URL映射-->
dwr
/dwr/*
index.html
===================================================================
Dwr.xml的配置(dwr.xml与web.xml位于同级目录下面)
===================================================================
xmlversion="1.0"encoding="GBK"?
>
DOCTYPEdwrPUBLIC"-//GetAheadLimited//DTDDirectWebRemoting2.0//EN""http:
//getahead.ltd.uk/dwr/dwr20.dtd">
[CDATA[
importa8.HelloA8;
importa8.Person;
importjava.util.List;
importjava.util.Map;
hello.sendList(List);
hello.sendMap(Map);
]]>
===================================================================
HTML内容
===================================================================
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
DWR入门
DWR入门
请输入您的名字
下面是服务器的回应: