日期:2014-05-16  浏览次数:20714 次

Java 开发员AJAX 常见问题

Java 开发员AJAX 常见问题
2010年09月08日
  我应该考虑用 AJAX吗?
  AJAX现在当然很红,但它不一定适合你。AJAX只能用在最新的浏览器上,暴露出许多浏览器兼容性问题,对许多人它还要求学会一些新技术。Alex Bosworth 写了篇不错的网志 AJAX Mistakes,在你全力投入AJAX以前值得一看。 
  另一方面,你可以实现丰富的,高度交互性的,快速响应的WEB应用,它们看起来真的很快。尽管人们还在争论基于AJAX的应用是不是真的更快, 用户已感到更直接了,因为当数据在后台交换的时候,用户就收到了积极反馈。如果你较早采用了AJAX,能够处理浏览器兼容性问题,而且愿意学习一些新技术,那么AJAX是适合你的。谨慎起见,你可以试着把应用的一小部分或者小组件转化成AJAX。我们都喜欢新技术,但要记住AJAX的目的是要改善而不是妨碍用户的体验。
  AJAX 能不能和Java一起用?
  当然。Java很适合AJAX!你可以用Java企业版服务器来生成AJAX 客户端页面并处理进来的请求,为AJAX 客户端管理服务器端的状态,并且把AJAX 客户端联接到企业资源。JavaServe* **ces 组件模型非常适合于定义和使用AJAX组件。
  难道我的框架不提供AJAX吗?
  你可能已经受益于AJAX。许多现有的基于Java 的框架已经有一定的AJAX 交互,许多新的框架和组件正在被开发来更好地支持AJAX。这里我不想列出所有用AJAX 的Java框架,因为我怕会遗漏一些。但是你可以在这里找到一个不错的列单: www.ajaxpatterns.org/Java_Ajax_Frameworks. 
  如果你还没有选好一个框架,我建议你考虑使用JavaServe* **ces 或者基于JavaServe* **ces的框架。你可以用JavaServe* **ces组件来抽象化处理许多细节:生成JavaScript, AJAX交互, 和DHTML处理,这样JSF开发员就可以更方便地使用AJAX,它们还可以作为插件装入支持JSF的IDE内,比如 Sun Java Studio Creator. 
  该从哪里开始?
  如果你现在的框架不能满足你的用例,你想开发自己的AJAX组件和功能,我建议你先看一下这篇文章Asynchronous JavaScript Technology and XML (AJAX) With Java 2 Platform, Enterprise Edition。(译者注:中文版 在Java2平台企业版中应用异步 JavaScript技术和XML(AJAX)) 
  如果你想看一个很基本的例子和源代码,这里有 Using AJAX with Java Technology。 Blueprints AJAX Home 有更完整的AJAX资源。
  接下来,我建议你花些时间研究AJAX库和框架。如果你想自己写AJAX客户端脚本,最好不要再重复劳动了。
  Dave Crane,Eric Pascarello和Darren James的AJAX in Action也不错。这本书有附录中讲学习 JavaScript,对Java开发员有帮助。 
  创建我自己的AJAX 功能,我要知道些什么?
  如果你不想利用已有的AJAX组件,这里是一些需要注意的地方。 
  准备学习动态HTML (DHTML), AJAX的基础技术。DHTML让用户与网页间通过浏览器现时交互成为可能。DHTML结合了JavaScript,文档对象模型(DOM)和层叠样式表 (CSS). 
  JavaScript - JavaScript是个宽松类型的,基于对象的脚本语言。它是AJAX交互的关键,而且所有的主流浏览器都支持它。当页面中的一个事件发生时,例如,载入页面,鼠标点击,或表单元素上的按键,JavaScript就被调用了。 
  文档对象模型(DOM) - 用来读取和更改结构化文档的应用编程接口。在大多数情况下DOM代表XML和HTML文档的结构。
  层叠样式表(CSS) - 让你定义页面的外观,例如:字体,颜色,大小,和定位。CSS让你清晰地分隔开内容和形式,并且可以用JavaScript来编程改变。 
  理解HTTP的请求/回应这一基本性质也很重要。如果你在配置XMLHttpRequest时忽略了GET和POST方法的区别,或者在处理回调时忽略了HTTP状态代码,你会碰到许多难题。
  从某种意义上说,JavaScript是一种客户端的胶合体。JavaScript被用来创建XMLHttpRequest对象并触发异步调用。 JavaScript被用来解析返回的内容。JavaScript被用来分析返回的数据并处理返回的信息。用JavaScript可以通过DOM API往HTML里注入内容和改变CSS。
  我真的需要学JavaScript吗?
  一般来说,是的,如果你想为你的WEB应用开发新的AJAX功能。
  另外一方面, JSF 组件和组件库能抽象化JavaScript,DOM和CSS的细节。这些组件能生成必要的工件(artifacts)来支持AJAX交互。可视的工具,象Java Studio Creator,也可以利用支持AJAX的JSF组件来创建应用,应用开发者就不用担心AJAX的许多细节了。如果你打算写自己的 JSF组件,或者想把组件间的事件串联在一起,你应该对JavaScript有个基本了解。你可以从你页面里的JavaScript调用一些客户端的JavaScript 库(在下面谈到)来抽象化测声器间的差异。 Object Hierarchy and Inheritance in JavaScript 是一个供Java开发员学习JavaScript对象的很好的参考。
  有哪些JavaScript 库和框架可以帮助Java开发员?
  已经有许多库和框架(而且许多还在涌现出来)能帮助我们抽象化这些讨厌的浏览器差异。三个不错的库是:The Dojo Toolkit, Prototype, and DWR. 
  The Dojo Toolkit 包含一些API和工具来支持开发富WEB应用。Dojo包含一个智能的包装系统,用户界面效果,拖放方法(Drag and Drop) API,小应用(widget)API,事件抽象,客户存储API,以及AJAX交互API。Dojo解决了一些常见的可用性(Usability)问题, 比如,处理浏览器导航问题包括察觉浏览器退后按钮,更改地址栏里的URL来收藏书签,当客户端不完全支持AJAX和JavaScript时妥善处理。Dojo就好比是JavaScript库中的一把瑞士军刀。 它在一个库里提供了最广泛的选择,而且能很好地支持新老浏览器。 
  Prototype 专注于通过JavaScript AJAX对象进行AJAX 交互,它包含了若干对象来做基本的工作,比如发出请求,更新部分文档,往文档里插入内容,以及定期更新部分文档。Prototype JavaScript库包含了一套JavaScript对象来代表AJAX请求,和一些效用函数来读取页面内的数据和修改DOM。 Script.aculo.us和Rico就是建立在Prototype之上并提供了用户界面效果,支持拖放效果,以及一些围绕JavaScript的不工具(widgets)。如果你想支持AJAX交互和一些基本的功能,Prototype是个很好的选择。如果你需要用户界面效果,Script.aculo.us和Rico是不错的。
  Yahoo UI Library 是一个通过API来支持富客户端的效用库和一套小应用。这个效用库包括了支持跨浏览器的AJAX交互,动画,DOM脚本,拖放,以及跨浏览器事件。 Yahoo UI Library提供较好的文档和许多例子。
  DWR (Dynamic Web Remoting) 是一个客户端和服务器端的框架,它专注于允许开发员实现从客户端JavaScript到J2EE WEB容器内的普通Java对象(Plain Old Java Object)之间的远程调用。在服务器端,DWR用一个Servlet来和Java对象交互,并返回Java对象或做成了对象的XML文档。 DWR安装使用方便,和其它Java技术配合较好。如果你想要一个整合性能良好,同时支持客户端和服务器的框架,那就用 DWR. 
  Zimbra 是个客户端和服务器的框架,它专注于支持消息(messaging),包括向使用JavaScript的客户端提供电子邮件服务。在它的工具包中有抽象化浏览器差异的UI API(同时也包括了许多内在的小应用),支持UI事件通信和客户与服务器之间通信的API,简化客户端JavaScript开发的效用类,抽象化了的 DOM API以简化跨浏览器