Ajax: 构建动态的 Java 应用程序

畏深

畏深

2016-02-19 18:27

下面图老师小编跟大家分享Ajax: 构建动态的 Java 应用程序,一起来学习下过程究竟如何进行吧!喜欢就赶紧收藏起来哦~

  在 Web 应用程序开发中,页面重载循环是最大的一个使用障碍,对于 Java? 开发人员来说也是一个严峻的挑战。在这个系列中,作者 Philip McCarthy 介绍了一种创建动态应用程序体验的开创性方式。
Ajax(异步 JavaScript 和 XML)是一种编程技术,它允许为基于 Java 的 Web 应用程序把 Java 技术、XML 和 JavaScript 组合起来,从而打破页面重载的范式。
  
  Ajax(即异步 JavaScript 和 XML)是一种 Web 应用程序开发的手段,它采用客户端脚本与 Web 服务器交换数据。所以,不必采用会中断交互的完整页面刷新,就可以动态地更新 Web 页面。使用 Ajax,可以创建更加丰富、更加动态的 Web 应用程序用户界面,其即时性与可用性甚至能够接近本机桌面应用程序。
  
  Ajax 不是一项技术,而更像是一个 模式 —— 一种识别和描述有用的设计技术的方式。Ajax 是新颖的,因为许多开发人员才刚刚开始知道它,但是所有实现 Ajax 应用程序的组件都已经存在若干年了。它目前受到重视是因为在 2004 和 2005 年出现了一些基于 Ajax 技术的非常棒的动态 Web UI,最著名的就是 Google 的 GMail 和 Maps 应用程序,以及照片共享站点 Flickr。这些用户界面具有足够的开创性,有些开发人员称之为“Web 2.0”,因此对 Ajax 应用程序的兴趣飞速上升。
  
  在这个系列中,我将提供使用 Ajax 开发应用程序需要的全部工具 。在第一篇文章中,我将解释 Ajax 背后的概念,演示为基于 Java 的 Web 应用程序创建 Ajax 界面的基本步骤。我将使用代码示例演示让 Ajax 应用程序如此动态的服务器端 Java 代码和客户端 JavaScript。最后,我将指出 Ajax 方式的一些不足,以及在创建 Ajax 应用程序时应当考虑的一些更广的可用性和访问性问题。
  
  更好的购物车
  
  可以用 Ajax 增强传统的 Web 应用程序,通过消除页面装入从而简化交互。为了演示这一点,我采用一个简单的购物车示例,在向里面添加项目时,它会动态更新。这项技术如果整合到在线商店,那么用户可以持续地浏览和向购物车中添加项目,而不必在每次点击之后都等候完整的页面更新。虽然这篇文章中的有些代码特定于购物车示例,但是演示的技术可以应用于任何 Ajax 应用程序。清单 1 显示了购物车示例使用的有关 HTML 代码,整篇文章中都会使用这个 HTML。
  
  清单1. 购物车示例的有关片断
  
  !-- Table of products from store's catalog, one row per item --
  thName/th thDescription/th thPrice/th th/th
  ...
  tr
  !-- Item details --
  tdHat/td tdStylish bowler hat/td td$19.99/td
  td
  !-- Click button to add item to cart via Ajax request --
  button onclick="addToCart('hat001')"Add to Cart/button
  /td
  /tr
  ...
  
  !-- Representation of shopping cart, updated asynchronously --
  ul id="cart-contents"
  
  !-- List-items will be added here for each item in the cart --
  
  /ul
  
  !-- Total cost of items in cart displayed inside span element --
  Total cost: span id="total"$0.00/span
  

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)Ajax 往返过程
  
  Ajax 交互开始于叫作 XMLHttpRequest 的 JavaScript 对象。顾名思义,它允许客户端脚本执行 HTTP 请求,并解析 XML 服务器响应。Ajax 往返过程的第一步是创建 XMLHttpRequest 的实例。在 XMLHttpRequest 对象上设置请求使用的 HTTP 方法(GET 或 POST)以及目标 URL。
  
  现在,您还记得 Ajax 的第一个 a 是代表 异步(asynchronous) 吗?在发送 HTTP 请求时,不想让浏览器挂着等候服务器响应。相反,您想让浏览器继续对用户与页面的交互进行响应,并在服务器响应到达时再进行处理。为了实现这个要求,可以在 XMLHttpRequest 上注册一个回调函数,然后异步地分派 XMLHttpRequest。然后控制就会返回浏览器,当服务器响应到达时,会调用回调函数。
  
  在 Java Web 服务器上,请求同其他 HttpServletRequest 一样到达。在解析了请求参数之后,servlet 调用必要的应用程序逻辑,把响应序列化成 XML,并把 XML 写入 HttpServletResponse。
  
  回到客户端时,现在调用注册在 XMLHttpRequest 上的回调函数,处理服务器返回的 XML 文档。最后,根据服务器返回的数据,用 JavaScript 操纵页面的 HTML DOM,把用户界面更新。  
  

  现在您对 Ajax 往返过程有了一个高层面的认识。下面我将放大其中的每一步骤,进行更详细的观察。如果过程中迷了路,请回头看图 1 —— 由于 Ajax 方式的异步性质,所以顺序并非十分简单。
  
  分派 XMLHttpRequest
  
  我将从 Ajax 序列的起点开始:创建和分派来自浏览器的 XMLHttpRequest。不幸的是,不同的浏览器创建 XMLHttpRequest 的方法各不相同。清单 2 的 JavaScript 函数消除了这些依赖于浏览器的技巧,它可以检测当前浏览器要使用的正确方式,并返回一个可以使用的 XMLHttpRequest。最好是把它当作辅助代码:只要把它拷贝到 JavaScript 库,并在需要 XMLHttpRequest 的时候使用它就可以了。
  
  清单 2. 创建跨浏览器的 XMLHttpRequest
  
  /*
  * Returns a new XMLHttpRequest object, or false if this browser
  * doesn't support it
  */
  function newXMLHttpRequest() {
  
  var xmlreq = false;
  
  if (window.XMLHttpRequest) {
  
  // Create XMLHttpRequest object in non-Microsoft browsers
  xmlreq = new XMLHttpRequest();
  
  } else if (window.ActiveXObject) {
  
  // Create XMLHttpRequest via MS ActiveX
  try {
  // Try to create XMLHttpRequest in later versions
  // of Internet Explorer
  
  xmlreq = new ActiveXObject("Msxml2.XMLHTTP");
  
  } catch (e1) {
  
  // Failed to create required ActiveXObject
  

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)try {
  // Try version supported by older versions
  // of Internet Explorer
  
  xmlreq = new ActiveXObject("Microsoft.XMLHTTP");
  
  } catch (e2) {
  
  // Unable to create an XMLHttpRequest with ActiveX
  }
  }
  }
  
  return xmlreq;
  }
  
  稍后我将讨论处理那些不支持 XMLHttpRequest 的浏览器的技术。目前,示例假设清单 2 的 newXMLHttpRequest 函数总能返回 XMLHttpRequest 实例。
  
  返回示例的购物车场景,我想要当用户在目录项目上点击 Add to Cart 时启动 Ajax 交互。名为 addToCart() 的 onclick 处理函数负责通过 Ajax 调用来更新购物车的状态(请参阅 清单 1)。正如清单 3 所示,addToCart() 需要做的第一件事是通过调用清单 2 的 newXMLHttpRequest() 函数得到 XMLHttpRequest 对象。接下来,它注册一个回调函数,用来接收服务器响应(我稍后再详细解释这一步;请参阅 清单 6)。
  
  因为请求会修改服务器上的状态,所以我将用 HTTP POST 做这个工作。通过 POST 发送数据要求三个步骤。第一,需要打开与要通信的服务器资源的 POST 连接 —— 在这个示例中,服务器资源是一个映射到 URL cart.do 的 servlet。然后,我在 XMLHttpRequest 上设置一个头,指明请求的内容是表单 编码的数据。最后,我用表单编码的数据作为请求体发送请求。
  
  清单 3 把这些步骤放在了一起。
  
  清单 3. 分派 Add to Cart XMLHttpRequest
  
  /*
  * Adds an item, identified by its product code, to the shopping cart
  * itemCode - product code of the item to add.
  */
  function addToCart(itemCode) {
  
  // Obtain an XMLHttpRequest instance
  var req = newXMLHttpRequest();
  
  // Set the handler function to receive callback notifications
  // from the request object
  var handlerFunction = getReadyStateHandler(req, updateCart);
  req.onreadystatechange = handlerFunction;
  
  // Open an HTTP POST connection to the shopping cart servlet.
  // Third parameter specifies request is asynchronous.
  req.open("POST", "cart.do", true);
  
  // Specify that the body of the request contains form data
  req.setRequestHeader("Content-Type",
  "application/x-www-form-urlencoded");
  
  // Send form encoded data stating that I want to add the
  // specified item to the cart.
  req.send("action=add&item="+itemCode);
  }
  
  这就是建立 Ajax 往返过程的第一部分,即创建和分派来自客户机的 HTTP 请求。接下来是用来处理请求的 Java servlet 代码。
  
  servlet 请求处理
  
  用 servlet 处理 XMLHttpRequest,与处理普通的浏览器 HTTP 请求一样。可以用 HttpServletRequest.getParameter() 得到在 POST 请求
展开更多 50%)
分享

猜你喜欢

Ajax: 构建动态的 Java 应用程序

Web开发
Ajax: 构建动态的 Java 应用程序

面向Java程序员的Ajax:构建动态Java程序

编程语言 网络编程
面向Java程序员的Ajax:构建动态Java程序

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

用Oracle JDeveloper 10.1.3构建Ajax应用程序

电脑网络
用Oracle JDeveloper 10.1.3构建Ajax应用程序

使用AJAX技术构建更优秀的Web应用程序

电脑网络
使用AJAX技术构建更优秀的Web应用程序

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

从Java应用程序动态生成PDF文件

编程语言 网络编程
从Java应用程序动态生成PDF文件

Java进阶 Java应用程序中动态分配CPU资源

编程语言 网络编程
Java进阶 Java应用程序中动态分配CPU资源

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

在VB中调用API函数动态改变及恢复屏幕设置

在VB中调用API函数动态改变及恢复屏幕设置

在Word2010文档中设置标签选项

在Word2010文档中设置标签选项
下拉加载更多内容 ↓