Ajax框架,DWR介绍,应用,样例
使用Ajax框架
1. 简化JavaScript的开发难度
2. 解决浏览器的兼容性问题
3. 简化开发流程
经常使用Ajax框架
Prototype
一个纯粹的JavaScript函数库,对Ajax提供良好支持
jQuery
1.很优秀的JavaScript库,对Ajax提供了良好的支持
2.与Prototype设计思想不同的是在使用jQuery之后,开发人员操作的不再是DOM对象而是jQuery对象
DWR
1. 很专业的Java Ajax框架
2. 通过DWR框架,可将Java类的方法直接暴露给client
Dojo
① Dojo功能强大,包括很多内容,Ajax仅仅是当中之中的一个
② 特点在于控件和控件系统
③ 眼下Dojo仍然在开发完好中,版本号更新速度很快
AjaxTags
由一系列JSP标签组成,将经常使用的Ajax应用场景封装为简单的标签
使用DWR框架简化Ajax开发
1. DWR(Direct Web Remoting)是一个Java Ajax框架
2. DWR框架同意开发者在client通过JavaScript代码调用server端的Java方法
3. DWR框架主要由两部分组成:
1.clientJavaScript代码直接调用server端Java方法
2.server上执行的DWR核心Servlet负责处理client请求,将client请求托付到实际的Java对象进行处理,并将结果返回给client
下载DWR框架
DWR的官方网站:
http://directwebremoting.org/dwr/downloads/index.html
各下载项说明:
1. JAR File:该选项仅下载dwr.jar文件
2. WAR File:该选项下载dwr.jar文件及其其它依赖的类库,还包含DWR的使用范例
3. Sources:该选项下载DWR的源文件
安装DWR
1.加入dwr.jar文件到WEB-INF/lib文件夹下
2.改动web.xml文件,加入例如以下代码
<servlet>
<servlet-name>dwr_invoker</servlet-name>
<servlet-class>
org.directwebremoting.servlet.DwrServlet
</servlet-class>
<init-param><!--初始化參数,debug开发时设置-->
<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 创建dwr.xml文件
1. 与web.xml文件位于同一文件夹
2. 该文件用于定义Java类和JavaScript之间的相应关系,将Java类的方法暴露给client
其结构例如以下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN"
"http://getahead.org/dwr/dwr30.dtd">
<dwr>
<allow>
<!-- 创建脚本对象 -->
<create creator="..." javascript="..." scope="...">
<!-- 要公布的类名 -->
<param name="..." value="..." />
<!-- 暴露给client的,要公布的方法名 -->
<include method="…" />
<!-- 不暴露给client的 -->
<exclude method="…" />
</create>
<!-- js和服务端的对象进行转换 -->
<convert converter="..." match="..." />
</allow>
</dwr>
dwr.xml具体解释 (參考dwr.xml)
<allow>元素:定义了DWR可以创建和转换的类,是dwr.xml中最重要的元素
<create>元素:创建器定义怎样将一个Java类转换成JavaScript对象
<convert >元素:类型转换器,用于定义Java类型和JavaScript类型之间的相应关系
<create>元素的属性:
creator属性:DWR内置多个创建器用于处理多种类型Java类
javascript属性:在client给创建的JavaScript对象命名。该名字将在页面里作为js被导入
scope属性:作用域。选项能够是:application, session,request和page。默觉得page
<create>元素的子元素:
<param>元素:用来指定创建器的參数。当中name属性用来指定參数名称,value指定參数的值
<include>元素:定义同意訪问的方法列表,其它方法将不暴露给client
<exclude>元素:定义不同意訪问的方法列表,当中method属性指定不被暴露给client的方法(其它没指定的方法默认暴露给client)
<convert>元素
全部基本类型,boolean、 int 、double等等
包装类,Boolean、Integer等等
java.lang.String
日期类型,如:java.util.Date 和 java.sql.Times、java.sql.Timestamp等
数组(存放以上类型的)
集合类型 (List、Set、Map、Iterator等等)
Bean转换器
用于完毕JavaBean对象和JavaScript对象之间的转换
DWR默认关闭Bean转换器
假设须要进行JavaBean对象和JavaScript对象之间的转换,须要在dwr.xml中显式设置
<convert converter="bean"match="www.dwrdemo.DwrBean"/>
为Webproject加入DWR支持,样例:
增加DWR jar包 ;
(要增加commons-logging.jar)
改动web.xml文件:加servlet
<servlet>
<servlet-name>dwr_invoker</servlet-name>
<servlet-class>
org.directwebremoting.servlet.DwrServlet
</servlet-class>
<init-param><!--初始化參数,debug开发时设置-->
<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>
创建dwr.xml文件 (參考
dwr30.dtd:/org/directwebremoting/dwr30.dtd
和dwr.xml:/org/directwebremoting/dwr.xml
写)
与web.xml文件位于同一文件夹(能够放在src下,可是须要要在web.xml配置的
Servlet里面加
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/classes/dwr.xml</param-value>
</init-param>
初始化的时候,会调用源代码里面的相应方法
)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN"
"http://getahead.org/dwr/dwr30.dtd">
<dwr>
<allow>
<!-- 创建脚本对象 -->
<create creator="new" javascript="DwrDemoDate" scope="application" >
<!-- 要公布的类名 -->
<param name="class" value="java.util.Date" />
</create>
</allow>
</dwr>
部署,訪问:http://localhost:8080/DWRDemo/dwr
Bean转换器
用于完毕JavaBean对象和JavaScript对象之间的转换
DWR默认关闭Bean转换器
假设须要进行JavaBean对象和JavaScript对象之间的转换,须要在dwr.xml中显式设置
<convert converter="bean"match="www.dwrdemo.DwrBean"/>
以下举例:
样例 使用Bean转换器
public DwrBean getDwrBean(){
return new DwrBean();
}
DwrBean在com包下 加入私有属性message和它get set方法;
Dwr.xml配置:在<allow>里面加入:
<create creator="new" javascript="DwrService" scope="application">
<!-- 要公布的类名 -->
<param name="class" value="com.DwrService" />
</create>
<convert converter="bean" match="com.DwrBean" />
重新启动訪问 http://localhost:8080/DWRDemo/dwr 点击第二个
样例:使用DWR实现页面载入时输出当前的时间等
DWR 怎样简化Ajax 开发
http://localhost:8080/DWRDemo/dwr/test/DwrDemoDate前面两行script导入index,编写js
index.jsp:
</head>
<!-- 导入DWR的JavaScript文件-->
<script type='text/javascript' src='/DWRDemo/dwr/engine.js'></script>
<!-- 导入DWR为Java对象动态生成的JavaScript文件-->
<script type='text/javascript' src='/DWRDemo/dwr/interface/DwrDemoDate.js'></script>
<script type="text/javascript">
function init(){
//调用Date对象的toString()方法,load为回调函数
DwrDemoDate.toString(load);
}
function load(data){
document.getElementById("time").innerHTML = data;
}
</script>
<body>
<input id="" type="button" onclick="init()" value="show" />
<dir id="time"></dir>
</body>
重新启动tomcat訪问主页;http://localhost:8080/DWRDemo/
点击show,以下显示出当前时间;
样例:在页面输出client输入的信息
public DwrBean getDwrBean(String message) {
DwrBean db = new DwrBean();
db.setMessage(message);
return db;
}
在Index.jsp加入
http://localhost:8080/DWRDemo/dwr/test/DwrService前面script
<script type='text/javascript' src='/DWRDemo/dwr/interface/DwrService.js'></script>
在js和body里面增加:
function getMessage(){
var msg=document.getElementById("myMsg").value;
DwrService.getDwrBean(msg,showMsg);
}
function showMsg(bean){
document.getElementById("message").innerHTML = bean.message;
} <body>
<input id="myMsg"> <input id="" type="button" onclick="getMessage()" value=" showMsg" />
<dir id="message"></dir>
</body>
重新启动tomcat,訪问主页,输入文字,点击showMsg使用的是ajax技术;
我们能够在DwrService里面的方法getDwrBean加入:
System.out.println(message);
重新启动执行的时候,能够看到控制台输出 我们输入的信息,意味着我们能够訪问数据库等操作;
使用DWR框架能够异步訪问服务端对象
脚本文件说明:
engine.js
1.engine.js对DWR很重要,它是DWRclient的核心,用来把动态生成的JavaScript对象转换为server上的Java对象
该函数库可用于设置一些DWR的全局属性
dwr.engine.setTimeout(time),以毫秒为单位设置请求超时的时间
dwr.engine.setHttpMethod(method),该方法仅仅能设置两个值POST和GET
dwr.engine.setOrdered(boolean),Ajax通常都是异步调用,但server响应的顺序与调用顺序往往不同,使用dwr.engine.setOrfered(true)语句,DWR将保证请求的顺序与server响应的顺序一致
2.util.js
1. util.js文件里包括了一些工具函数,通过这些函数的帮助,将简化JavaScript操作
2. util.js提供一些主要的页面操作函数,通过这些函数能够方便的操作HTML元素
3. util.js文件与DWR框架关系不是特别大,能够在不论什么不同的网页中使用(即便该project没有DWR支持)
补充说明:
$( )函数
$( )函数依据指定ID查找页面中的HTML元素
简单的讲以下两个一样的意思:
$(ID)= document.getElementById(ID)
使用 $() 使代码更简洁、更清晰
在index.jsp导入:
<script type='text/javascript' src='/DWRDemo/dwr/util.js'></script>
在js里面加入:
//$( )函数
function test(){
var msg=$('message').innerHTML;
alert(msg);
}
body加入;
<input id="test1"type="button"onclick="test()"value="使用$(
)函数"/>
刷新页面,要先在myMsg框输入信息,在点击showMsg,id为message才有内容,才干够做上面的实验,然后点击使用$( )函数
getValue() 和setValue()函数
getValue()函数和setValue()函数用于简化訪问和改动HTML元素的值
dwr.util.getValue(id):返回HTML元素的值
dwr.util.setVlaue(id,value [,options]):依据第一个參数中指定的id找到对应元素,并依据第二个參数value改变该元素的值
在index.jsp导入:
<scripttype='text/javascript' src='/DWRDemo/dwr/util.js'></script>
在js加入:
//getValue() 和setValue()函数
function set(){
var value=dwr.util.getValue('set');
dwr.util.setValue('myMsg',value);
}
在body加入:
<input id="set"type="button"onclick="set()"value="getValue()得到的值"/>
刷新页面,点击getValue()得到的值后将信息显示到id为myMsg的输入框上;
列表操作函数
dwr.util.removeAllOption(id):用于删除列表中的全部项
dwr.util.addOptions():用于加入列表项
表格操作函数
DWR提供两个函数帮助我们操作表格
dwr.util.removeAllRows(id):删除table中全部行
dwr.util.addRows(id,array,cellFuncs,[options]):向表中加入数据行
源代码和所用到的jar包下载:
Ajax框架,DWR介绍,应用,样例的更多相关文章
- Ajax框架,DWR介绍,应用,例子
使用Ajax框架 1. 简化JavaScript的开发难度 2. 解决浏览器的兼容性问题 3. 简化开发流程 常用Ajax框架 Prototype 一个纯粹的JavaScript函数库,对Ajax提供 ...
- Tiny并行计算框架之复杂演示样例
问题来源 很感谢@doctorwho的问题: 假如职业介绍所来了一批生产汽车的工作,如果生产一辆汽车任务是这种:搭好底盘.拧4个轮胎.安装发动机.安装4个座椅.再装4个车门.最后安装顶棚. 之间有的 ...
- python nose测试框架全面介绍十---用例的跳过
又来写nose了,这次主要介绍nose中的用例跳过应用,之前也有介绍,见python nose测试框架全面介绍四,但介绍的不详细.下面详细解析下 nose自带的SkipTest 先看看nose自带的S ...
- java并行调度框架封装及演示样例
參考资料: 阿里巴巴开源项目 CobarClient 源代码实现. 分享作者:闫建忠 分享时间:2014年5月7日 ---------------------------------------- ...
- Ajax框架---dwr的用法
通常使用Ajax时用的都是jQuery框架,现在公司的框架里用的都是dwr.我觉得dwr和jQuery中的ajax用法差不多,看起来也很像. 一.简介 百度百科上对dwr的描述: DWR采取了一个类似 ...
- python nose测试框架全面介绍十一---用例的发现
nose是怎么发现用例的??网上一大把说函数以test开头的都会自动发现,真的是这样吗???还是自己来试验下吧 首先,我们还是来看看官方文档怎么说的吧: If it looks like a test ...
- 用python + hadoop streaming 编写分布式程序(一) -- 原理介绍,样例程序与本地调试
相关随笔: Hadoop-1.0.4集群搭建笔记 用python + hadoop streaming 编写分布式程序(二) -- 在集群上运行与监控 用python + hadoop streami ...
- jquery ajax 跨域訪问样例
<script type="text/javascript"> $(function(){ $.ajax({ cache : false, type ...
- EazyUI主页框架搭建纯JS样例
採用Jfinal+EazyUI 执行起来就好能够了 眼下还未增加后台代码 纯JS代码搭建的一个二级菜单+主页 客户换肤, 给使用EazyUI的新人一个高速可用的JS 搭建界面 也给自己保存下 界面 ...
随机推荐
- 红外遥控系统原理及单片机软件解码程序,我的编写经历(C版本)
应该说现在每一块开发板都带有红外模块,并且大都配置了相应的程序.但其实自己动手写解码程序,更能锻炼自己所学,且不谈程序写的如何,这个过程中肯定是受益良多的.现在我就把我花一下午写出的解码程序与大家分享 ...
- C#调用C++DLL传递结构体数组的终极解决方案
在项目开发时,要调用C++封装的DLL,普通的类型C#上一般都对应,只要用DllImport传入从DLL中引入函数就可以了.但是当传递的是结构体.结构体数组或者结构体指针的时候,就会发现C#上没有类型 ...
- Hibernate缓存、组件、继承映射
Hibernate缓存.组件.继承映射 三种状态: 临时状态:不受session管理,没有提交到数据库:没有执行sql之前,new对象的时候: 持久化状态:受session管理,提交到数据库:正在执行 ...
- paip.svn使用最佳实践
paip.svn使用最佳实践 作者Attilax , EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net/attilax 1 ...
- UML视图(四)状态图
以下是一个图书馆管理系统的状态图,非常典型,涵盖状态图的全部元素的使用,由于状态图相对照较简单,直接从看图就能非常好地掌握.假设想对状态图的元素严谨的概念进行了解,在图下方,有仔细的叙述. 看了上面的 ...
- PHP-xml-1
SimpleXML 解析xml 假设xml没有声明encoding默认使用utf-8进行解码.终于得到的数据编码为utf-8格式. 我猜想它内部实现了iconv(encoding='utf-8', ' ...
- UVA 1610 Party Games
题意: 给出一系列字符串,构造出一个字符串大于等于其中的一半,小于另一半. 分析: 取大小为中间的两个a,b(a<b).实际上就是找出第一个小于b的同时大于等于a的字符串,直接构造即可. 代码: ...
- UVA 1599 Ideal Path
题意: 给出n和m,n代表有n个城市.接下来m行,分别给出a,b,c.代表a与b之间有一条颜色为c的道路.求最少走几条道路才能从1走到n.输出要走的道路数和颜色.保证颜色的字典序最小. 分析: bfs ...
- RDLC报表系列(二) 行分组
接上一篇文章的内容,今天来说的是行分组.还是打开demo1.rdlc界面,拖入一个文本框和表 1.在表中随便选择一个字段,不然在添加行组的时候不会自动提示.我这里是选择的Dept 2.在下面的行组中右 ...
- web中通过注释判断浏览器<!--[if !IE]><!--[if IE]><!--[if lt IE 6]><!--[if gte IE 6]>版本
<!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]--><!--[if IE]> 所有的IE可识别 <![e ...