面向Java程序员的Ajax:构建动态Java程序
来源:网络 更新时间:2014-12-3
Ajax(即异步JavaScript和XML)是一种Web应用程序开发的手段,它采用客户端脚本与Web服务器交换数据。所以,不必采用会中断交互的完整页面刷新,就可以动态地更新Web页面。使用Ajax,可以创建更加丰富、更加动态的Web应用程序用户界面,其即时性与可用性甚至能够接近本机桌面应用程序。
Ajax不是一项技术,而更像是一个模式——一种识别和描述有用的设计技术的方式。Ajax是新颖的,因为许多开发人员才刚刚开始知道它,但是所有实现Ajax应用程序的组件都已经存在若干年了。它目前受到重视是因为在2004和2005年出现了一些基于Ajax技术的非常棒的动态WebUI,最著名的就是Google的GMail和Maps应用程序,以及照片共享站点Flickr。这些用户界面具有足够的开创性,有些开发人员称之为“Web2.0”,因此对Ajax应用程序的兴趣飞速上升。
在这个系列中,我将提供使用Ajax开发应用程序需要的全部工具。在第一篇文章中,我将解释Ajax背后的概念,演示为基于Java的Web应用程序创建Ajax界面的基本步骤。我将使用代码示例演示让Ajax应用程序如此动态的服务器端Java代码和客户端JavaScript。最后,我将指出Ajax方式的一些不足,以及在创建Ajax应用程序时应当考虑的一些更广的可用性和访问性问题。
更好的购物车
可以用Ajax增强传统的Web应用程序,通过消除页面装入从而简化交互。为了演示这一点,我采用一个简单的购物车示例,在向里面添加项目时,它会动态更新。这项技术如果整合到在线商店,那么用户可以持续地浏览和向购物车中添加项目,而不必在每次点击之后都等候完整的页面更新。虽然这篇文章中的有些代码特定于购物车示例,但是演示的技术可以应用于任何Ajax应用程序。清单1显示了购物车示例使用的有关HTML代码,整篇文章中都会使用这个HTML。
清单1.购物车示例的有关片断
<!--Tableofproductsfromstore'scatalog,onerowperitem-->
<th>Name</th><th>Description</th><th>Price</th><th></th>
...
<tr>
<!--Itemdetails-->
<td>Hat</td><td>Stylishbowlerhat</td><td>$19.99</td>
<td>
<!--ClickbuttontoadditemtocartviaAjaxrequest-->
<buttononclick="addToCart('hat001')">AddtoCart</button>
</td>
</tr>
...
<!--Representationofshoppingcart,updatedasynchronously-->
<ulid="cart-contents">
<!--List-itemswillbeaddedhereforeachiteminthecart-->
</ul>
<!--Totalcostofitemsincartdisplayedinsidespanelement-->
Totalcost:<spanid="total">$0.00</span>
Ajax往返过程
Ajax交互开始于叫作XMLHttpRequest的JavaScript对象。顾名思义,它允许客户端脚本执行HTTP请求,并解析XML服务器响应。Ajax往返过程的第一步是创建XMLHttpRequest的实例。在XMLHttpRequest对象上设置请求使用的HTTP方法(GET或POST)以及目标URL。
现在,您还记得Ajax的第一个a是代表异步(asynchronous)吗?在发送HTTP请求时,不想让浏览器挂着等候服务器响应。相反,您想让浏览器继续对用户与页面的交互进行响应,并在服务器响应到达时再进行处理。为了实现这个要求,可以在XMLHttpRequest上注册一个回调函数,然后异步地分派XMLHttpRequest。然后控制就会返回浏览器,当服务器响应到达时,会调用回调函数。
在JavaWeb服务器上,请求同其他HttpServletRequest一样到达。在解析了请求参数之后,servlet调用必要的应用程序逻辑,把响应序列化成XML,并把XML写入HttpServletResponse。
回到客户端时,现在调用注册在XMLHttpRequest上的回调函数,处理服务器返回的XML文档。最后,根据服务器返回的数据,用JavaScript操纵页面的HTMLDOM,把用户界面更新。图1是Ajax往返过程的顺序图。