dwr运行原理研究

        以前曾经在做一个项目的时候用过dwr,最近有点时间想总结一下,就写出来吧。省却需要的朋友不少自己琢磨的时间。

        客户端的发送信息过程:

        透过engine.js可以看到客户端发送信息的过程。

        调 用服务器端远程方法的时候,为了减少多次和服务器端的通信,dwr允许将几个调用组成一个batch。在dwr.engine._sendData()方 法中,我们可以得知dwr将类似下面的数据封装成在request.body中。然后通过batch.req.send(request.body);发 送到服务器端。batch.req就是一个xmlHttpRequest对象或者ActiveXObject对象【根据不同的浏览器会有不同】

        在batch里面只有一个调用的时候,发送的数据形式如下:

java 代码
 
  1. callCount=1  
  2.   
  3. page=/hsell/saleroom.do  
  4.   
  5. httpSessionId=9002B6DEF1F3107925212B0F1A0E46DB  
  6.   
  7. scriptSessionId=5C5BECA8B721ACA5A23DFE9965EE15F5417  
  8.   
  9. c0-scriptName=SystemFaced           //配置的spring bean 的id或者类名  
  10.   
  11. c0-methodName=getCustomByCardId               //远程方法名  
  12.   
  13. c0-id=0  
  14.   
  15. c0-e1=string:342201198106244710               //向远程方法传递的数据  
  16.   
  17. c0-e2=string:342201198106244710  
  18.   
  19. c0-param0=Object_Object:{cardid1:reference:c0-e1, cardid2:reference:c0-e2}  
  20.   
  21. batchId=0  

 

那么将这些信息发送到哪个地址呢?

远程目的地址request.url中。url是类似于下面的这种格式。

http://localhost:8080/hsell/dwr/call/plaincall/SystemFaced.getCustomByCardId.dwr

SystemFaced.getCustomByCardId.dwr 中SystemFaced是我配置的spring bean的id或者是你自己的类名。

getCustomByCardId就是调用的远程方法名。

批量时候的情况

发送的数据类似下面的格式

java 代码
 
  1. callCount=2                    //内有两个远程调用  
  2.   
  3. page=/DWRTest/test.html  
  4.   
  5. httpSessionId=0B25A58FE06A0DF746B782F61A7F01B7  
  6.   
  7. scriptSessionId=8AE5628F0BBB54D89DE18B0F09A44785296  
  8.   
  9. c0-scriptName=Demo  
  10.   
  11. c0-methodName=getWords  
  12.   
  13. c0-id=0  
  14.   
  15. c1-scriptName=Demo  
  16.   
  17. c1-methodName=sayWords  
  18.   
  19. c1-id=1  
  20.   
  21. batchId=0  

 

目标url就是下面这种情况

http://localhost:8080/DWRTest/dwr/call/plaincall/Multiple.2.dwr

服务器端从客户端把调用的方法名和类名或者spring的bean id提取出来,根据配置文件找到对应的类和方法。然后执行之,将结果返回。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值