思诚科技 seecen LOGO
咨询热线:0791-87557233
  首页 |   Java EE  
关于思诚
关注官方微信

结合Direct Web Remoting使用AJAX

来源:网络    更新时间:2014-12-2


  在上一篇文章中,我介绍了如何用JavaScript对象标注(JSON)以一种在客户机上容易转化成JavaScript对象的格式对数据进行序列化。有了这个设置,就可以用JavaScript代码调用远程服务,并在响应中接收JavaScript对象图,但是又不像远程过程调用。这一次,将学习如何更进一步,使用一个框架,把从JavaScript客户代码对服务器端Java对象进行远程调用的能力正式化。

  DWR是一个开放源码的使用Apache许可协议的解决方案,它包含服务器端Java库、一个DWRServlet以及JavaScript库。虽然DWR不是Java平台上唯一可用的Ajax-RPC工具包,但是它是最成熟的,而且提供了许多有用的功能。请参阅参考资料,在继续学习之前下载DWR。

  DWR是什么?

  从最简单的角度来说,DWR是一个引擎,可以把服务器端Java对象的方法公开给JavaScript代码。使用DWR可以有效地从应用程序代码中把Ajax的全部请求-响应循环消除掉。这意味着客户端代码再也不需要直接处理XMLHttpRequest对象或者服务器的响应。不再需要编写对象的序列化代码或者使用第三方工具才能把对象变成XML。甚至不再需要编写servlet代码把Ajax请求调整成对Java域对象的调用。

  DWR是作为Web应用程序中的servlet部署的。把它看作一个黑盒子,这个servlet有两个主要作用:首先,对于公开的每个类,DWR动态地生成包含在Web页面中的JavaScript。生成的JavaScript包含存根函数,代表Java类上的对应方法并在幕后执行XMLHttpRequest。这些请求被发送给DWR,这时它的第二个作用就是把请求翻译成服务器端Java对象上的方法调用并把方法的返回值放在servlet响应中发送回客户端,编码成JavaScript。DWR还提供了帮助执行常见的用户界面任务的JavaScript工具函数。

  关于示例

  在更详细地解释DWR之前,我要介绍一个简单的示例场景。像在前一篇文章中一样,我将采用一个基于在线商店的最小模型,这次包含一个基本的产品表示、一个可以包含产品商品的用户购物车以及一个从数据存储查询产品的数据访问对象(DAO)。Item类与前一篇文章中使用的一样,但是不再实现任何手工序列化方法。图1说明了这个简单的设置:

图1.说明Cart、CatalogDAO和Item类的类图


  在这个场景中,我将演示两个非常简单的用例。第一,用户可以在目录中执行文本搜索并查看匹配的商品。第二,用户可以添加商品到购物车中并查看购物车中商品的总价。

  实现目录

  DWR应用程序的起点是编写服务器端对象模型。在这个示例中,我从编写DAO开始,用它提供对产品目录数据存储的搜索功能。CatalogDAO.java是一个简单的无状态的类,有一个无参数的构造函数。清单1显示了我想要公开给Ajax客户的Java方法的签名:

   清单1.通过DWR公开的CatalogDAO方法
/***Returnsalistofitemsinthecatalogthathave*namesordescriptionsmatchingthesearchexpression*@paramexpressionTexttosearchforinitemnames*anddescriptions*@returnlistofallmatchingitems*/publicList<Item>findItems(Stringexpression);/***ReturnstheItemcorrespondingtoagivenItemID*@paramidTheIDcodeoftheitem*@returnthematchingItem*/publicItemgetItem(Stringid);

  接下来,我需要配置DWR,告诉它Ajax客户应当能够构建CatalogDAO并调用这些方法。我在清单2所示的dwr.xml配置文件中做这些事:

   清单2.公开CatalogDAO方法的配置
<!DOCTYPEdwrPUBLIC"-//GetAheadLimited//DTDDirectWebRemoting1.0//EN""http://www.getahead.ltd.uk/dwr/dwr10.dtd"><dwr><allow><createcreator="new"javascript="catalog"><paramname="class"value="developerworks.ajax.store.CatalogDAO"/><includemethod="getItem"/><includemethod="findItems"/></create><convertconverter="bean"match="developerworks.ajax.store.Item"><paramname="include"value="id,name,description,formattedPrice"/></convert></allow></dwr>

  • 上一篇文章:

  • 下一篇文章:
  •  

    0791-87557233

    重视每个来电 珍惜您的时间
    思诚者开发沙龙
    江西思诚科技有限公司  赣ICP备17006097号  CopyRight©2014 - 2018