Dwr 实例教程.docx
- 文档编号:29920722
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:23
- 大小:413.26KB
Dwr 实例教程.docx
《Dwr 实例教程.docx》由会员分享,可在线阅读,更多相关《Dwr 实例教程.docx(23页珍藏版)》请在冰豆网上搜索。
Dwr实例教程
Dwr实例教程
原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处、作者信息和本人声明。
否则将追究法律责任。
作者:
永恒の_☆地址:
一、Dwr的介绍
Dwr简称DirectWebRemoting,它是一个JavaAjax远程调用的框架,利用这个框架开发可以让Ajax开发变得非常简单、快捷。
Dwr框架与匈奴开发人员在客户端都过javascript代码调用服务器段的java方法,这都依靠于服务器上运行的Dwr核心Servlet负责处理客户端的请求,将客户端请求委托到实际的java对象中进行处理,并将结果返回给客户端。
另外Dwr能够很好的与spring集成,直接调用spring中注入的bean。
二、Dwr的准备条件
dwr2.0.jar 下载地址:
commons-logging.jar(查看源码可以看到Dwr运行时依赖于common-logging库)
三、Dwr执行的流程
1、首先客户端发送一个javascript的请求,dwr识别该请求之后会将请求委托到Dwr中和核心Servlet;
2、核心Servlet会根据请求的对象以及方法去WEB-INF下的dwr.xml中找到具体的关联对象;
3、如果满足调用的条件,那么服务器会执行该方法,并返回对应的结果,这里返回的结果会被客户端发送请求的回调函数接收;
4、客户端收到返回结果之后,做出对应的处理,整个请求结束。
四、Dwr的案例讲解
1、使用Dwr做一个简单的demo
<1>、建立Web工程,添加Dwr的支持,这里以现有的支持struts2为基础的项目为例;
<2>、添加dwr配置文件,必须放在WEB-INF的根目录下,具体如下:
[html]viewplaincopyprint?
1.
xml version="1.0" encoding="UTF-8"?
>
2.
DOCTYPE dwr PUBLIC
3. "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN"
4. "http:
//getahead.org/dwr/dwr30.dtd">
5.
6.
7.
8.
9.
10.
11.
根目录是
creator:
表示创建方式,取值有new,bean等等,其中new表示新建,bean表示取现有的对象。
javascript:
表示在js客户端调用的对象引用,比如这里配置的对象是java.util.Date,那么dwrDate就是创建的对象引用,等价于java.util.DatedwrDate=newjava.util.Date();
name:
表示声明的name的形式;
value:
表示根据name绑定的具体值;
name取值有class,beanName等等,其中name="class"表示value中绑定的是类的完整限定名,name="beanName"表示value绑定的是spring中注入的对象的引用。
<3>、修改web.xml配置文件,配置Dwr的核心servlet,具体如下:
[html]viewplaincopyprint?
1.
-- 配置dwr框架的核心servlet -->
2.
3.
4.
5.
-- 添加调试模式,方便调试方法,正式发布的时候可以改为false 默认值为fasle-->
6.
7.
8.
9.
10.
11.
12.
13.
14.
如上配置,所有以/dwr/结尾的请求都会被DwrServlet匹配执行相应的请求。
好了,接下可以调试我们的Dwr了,启动服务器,打开浏览器输入:
http:
//localhost:
8080/house/dwr (这个是Dwr入口,将展示所有在dwr.xml中配置完的对象列表,点击进去会看到配置的对象允许方法的方法等)
结果报错,具体如下:
严重:
Allocateexceptionforservletdwr
org.xml.sax.SAXException:
Failedtoresolve:
arg0=-//GetAheadLimited//DTDDirectWebRemoting3.0//ENarg1=http:
//getahead.org/dwr/dwr30.dtd
这是因为添加的jar包是2.0版本的,但是却引用了3.0的dtd文件,所以报错了,改为如下配置即可:
[html]viewplaincopyprint?
1.
xml version="1.0" encoding="UTF-8"?
>
2.
DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"
3. "http:
//www.getahead.ltd.uk/dwr/dwr20.dtd">
4.
5.
6.
7.
8.
9.
10.
修改之后再次打开dwr地址,又报错了:
StrutsProblemReport
Strutshasdetectedanunhandledexception:
Messages:
ThereisnoActionmappedfornamespace/andactionnamedwr.
Stacktraces
ThereisnoActionmappedfornamespace/andactionnamedwr.-[unknownlocation]
意思就是说找不到namespace为/并且action名称为dwr的Action类,这里是因为struts2的核心控制器StrutsPrepareAndExecuteFilter,拦截了所有的请求去找action方法了,所以404。
现在要在struts.xml中过滤掉所有的以/dwr/这样子结尾的请求才行,添加一个不包括访问的参数即可,具体如下:
[html]viewplaincopyprint?
1.
-- 核心控制器在处理页面跳转时是拦截所有跳转,当跳转到house/dwr/下进行方法测试时,struts核心控制把
2. 它看成是一个action,所以就跳不过去了,可以通过配置一个常量struts.action.excludePattern,值里面用
3. 正则表达式匹配,
4. . 表示除了换行以外其他所有的字符
5. * 表示字符或表达式出现的次数零次或多次 -->
6.
保存struts.xml再次启动服务器,打开地址,效果如下:
这个就表示我们在dwr.xml中配置的dwrDate对象成功了。
点击dwrDate超链接,效果如下:
这里面列出了所有的java.util.Date中所有允许访问的放,点击每一个execute表示测试该方法。
。
ok....现在在Action类中添加一个方法dwrDemo()并且对应创建一个dwrDemo.jsp专门用于测试dwr。
具体如下:
[html]viewplaincopyprint?
1.<%@page import="java.util.List"%>
2.<%@ page language="java" contentType="text/html; charset=UTF-8"%>
3.<%@ include file="/common/taglib.jsp" %>
4.
DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:
//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5.
//www.w3.org/1999/xhtml">
6.
7.
8.
9.
-- 这三个js导入项必不可少 -->
10.
-- 每一个对象都会有以一个对象为名称的那个js库 -->
11.
12.
-- Dwr 引擎库 -->
13.
14.
-- Dwr 工具库 -->
15.
16.
33.
34.
35.
36.
37.
在地址栏输入:
http:
//localhost:
8080/house/house/dwrDemo.action,结果alert了三个文本都是SessionError。
这里需要在dwrServlet中添加参数crossDomainSessionSecurity,具体配置如下:
[html]viewplaincopyprint?
1.
-- 这个crossDomainSessionSecurity必须配置,应该是跨区域提交设置,默认是ture,
2. 如果不设置为false就会报错:
Session Error -->
3.
4.
5.
6.t;/init-param>
然后再次重启服务器打开dwrDemo页面,效果如下:
2、使用Dwr服务器对象配置允许访问的方法
接下来,新创建一个类,里面有setValue(),getValue()等等方法,具体如下:
[java]viewplaincopyprint?
1.private String value = "default";
2.
3.public String getValue(){
4. return value;
5.}
6.
7.public void setValue(String value){
8. this.value = value;
9.}
然后在dwr.xml中自己再配置一个自己定义的对象,具体如下:
[html]viewplaincopyprint?
1.
2.
3.
4.
5.
在配置文件中,新添加了
好了,然后打开服务器启动调试窗口,结果直接报错,具体如下:
[ERROR][http-apr-8080-exec-5]-Failedtoaddcreator:
type=new,javascript=houseDwrBiz
java.lang.IllegalArgumentException:
TheCreatorhouseDwrBizusesmixedincludeandexcludestatements
意思是说
并且实践证明,
是否允许访问可以在调试页面中的方法下面注明,如下:
(Warning:
getListPage()isexcluded:
Methodaccessisdeniedbyrulesindwr.xml.Seebelow)
这样子的话每允许访问一个方法就要加一个
[html]viewplaincopyprint?
1.
2.
3.
4.
5.
--
6.
添加测试的页面,具体如下:
[html]viewplaincopyprint?
1.<%@page import="java.util.List"%>
2.<%@ page language="java" contentType="text/html; charset=UTF-8"%>
3.<%@ include file="/common/taglib.jsp" %>
4.
DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:
//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5.
//www.w3.org/1999/xhtml">
6.
7.
8.
9.
-- 这三个js导入项必不可少 -->
10.
-- 每一个对象都会有以一个对象为名称的那个js库 -->
11.
12.
13.
-- Dwr 引擎库 -->
14.
15.
-- Dwr 工具库 -->
16.
17.
32.
33.
34.
35.
36.
37.
38.
39.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Dwr 实例教程