DWR

DWR运行原理:

(1)部署阶段:
1)读dwr.xml,在该xml文件中定义的Javascript(如名为cc),它对应的类为如DWRTest,这里cc相当于DWRTest,通过反射生成cc.js,其中DWRTest中的方法也就是调用后台类的方法;
(2)运行阶段:
触发事件调用一个方法——>
从自己的js中调用了上面的cc.js中的方法t1——>
调用客户端的AJAX引擎发出请求——>
以上三步都是由客户端完成,后面的都是有服务器端来完成:
Web容器先接到请求,找上下文路径:/dwr/匹配dwr中对应的servlet——>
读dwr.xml;根据js名匹配creator定义;依据creator方法创建实例(反射);调用方法,得到返回值——>
out出去——>
回调处理——>
调用客户端的回调处理(自己写的方法)。

DWR:
1 、是什么?
是一个框架。允许在 JavaScript 中访问后台 web 服务器上的 Java 代码。
2 、有什么?
基于 AJAX 的框架,包含两个主要部分:一个运行在服务器端的 Java Servlet ,它处理请求并且向浏览器发回响应;运行在浏览器端的 Javascript ,它发送请求而且能动态更新网页。
DWR 的工作原理是通过动态把 Java 类生成为 Javascript 。它不需要任何网页浏览器插件就能运行在网页上。
3 、能干什么?
让客户端 Javascript 通过 DWR 访问 Java 程序。
dwr使用
自己总结的教程:
dwr是有版本区分的,不同版本的dwr.xml是不一样的,引用的dwr.jar包也是不一样,现在用的是dwr3.0
1、jsp引用和调用访问(必须要引用的):
引用:
<script type='text/javascript' src='<%=basePath%>dwr/engine.js'></script>
<script type='text/javascript' src='<%=basePath%>dwr/util.js'></script>
<script type='text/javascript' src='<%=basePath%>dwr/interface/wltSay.js'></script>
其中:wltSay.js的脚本必须要跟dwr.xml里面的配置的javascript名称一样
其中:这三个文件存放的目录dwr,要跟web里面的配置一样:


记住, 上面引用的这三个脚本文件都是你看不到的,因为都在浏览器缓存里面。引用的路径是固定的
调用访问:
<script>
var req1 = {name1:"第一个req1",age1:"22岁"};
var req = {name:"第一个req",age:"21岁",bean1:req1};
//传参,复杂参数:对象里面包对象
//对应的后台代码如下:
//public ResponseBean sayAction(RequestBean requestBean){
//wltSay就是我们引用的js的名称,所以调用的名称和引用的脚本名称以及dwr.xml配置里面javascript的名称是一样。调用的方法就像类名.成员方法,调用成员变量一样
wltSay.sayAction(req,function(data){
alert(data.info);
});

var req1 = {name1:"测试同时传递两个对象",age1:"22岁"};
//传参,复杂参数,同时传递两个对象req,req1
//对应的后台代码如下:
//public ResponseBean sayAction(RequestBean requestBean,RequestBean1 requestBean1){
wltSay.sayAction(req,req1,function(data){
alert(data.info);
});
</script>
注意:dwr里面的方法不能支持重载,虽然可以发送请求过去,但是这个时候两个重载的方法回调函数只有一个生效。原因参考:
查看原因

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>
<!--		跨域调用配置信息-->
      <init-param>
             <param-name>crossDomainSessionSecurity</param-name>
             <param-value>false</param-value>
      </init-param>
      <init-param>
            <param-name>allowScriptTagRemoting</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>
dwr3.0的配置文件的配置模板:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC    "-//GetAhead Limited//DTD Direct Web Remoting 3.0//EN" 
   "http://www.getahead.ltd.uk/dwr/dwr30.dtd">
   <dwr>
        <allow>     
             <create creator="new" javascript="wltSay">
              <param name="class" value="com.wlt.action.Say"/>
          	 </create>
          	 <convert match="com.wlt.model.*" converter="bean"></convert>
        </allow>
   </dwr>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独行侠_阿涛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值