现在的位置: 首页 > 综合 > 正文

XMLHTTP是一种技术吗?

2013年10月03日 ⁄ 综合 ⁄ 共 1521字 ⁄ 字号 评论关闭

今天有人在MSN上问我有关XMLHTTP的问题,并问我有关XMLHTTP与Servlet结合的问题。我直接告诉他,直接采用XmlRPC或者Hessian吧。

对于XMLHTTP,我发现很多不了解它的人认为它很神秘。JavaEye上的dlee撰文声称有了XMLHTTP就不用MVC了等等“复杂”的模式,甚至有可能将WEB应用化三层为两层。在我看来,XMLHTTP的引入,仅仅,不过,是改善了用户界面,将原来需要刷新的东西变成不需要刷新而已。这种需求在以前的WEB程序中并不常见,但在现代的应用程序中,随着RIA的思想开始崛起,用户体验变得重要起来,例如:页面无刷新(典型的如树形结构的展开),或者页面的局部刷新。能够完成这项功能的XMLHTTP当然也显得重要起来。

XMLHTTP是一项技术吗?我从来都不这么认为。无论在Mozilla浏览器,还是在IE,他的方法/属性就那么几个:open, send, onreadystatechage, responseText, responseXML……这么抽象的东西,完成了原来浏览器的发送请求/接受数据的请求。这么看来,XMLHTTP不过是浏览器的一个附属线程而已。你可以用它实现你想要得无刷新等等一系列效果,那是有条件的:

这个条件就是,在没有XMLHTTP之前和之后,你的代码都不会因此而减少,更多的情况是代码增多。对于简单的应用,例如用户登陆,像服务器提交用户名密码,返回一个true或者false来代表登录成功与否。有了XMLHTTP之后,这个登陆效果可以做得很眩,同时代码跟没有XMLHTTP之前差不多。但是对于复杂的应用,例如大数据的列表,那么你有如下几种选择来使用XMLHTTP:

1 对于懒人,最简单的方法莫过于在服务器端将列表的HTML生成(大段的<tr><td>之类),然后输出。客户端用xmlhttp.responseText,将数据取得。一眼便知,这种方式除了界面无刷新,代码量,难度等等不会有多大的变化。

2 对于喜欢XML或者喜欢结构化数据的人,会将数据包装成为xml节点,然后在客户端用xmlhttp.responseXML取得XML。然后就有两种处理了:在我看来,最简单的处理就是写一个XSL对取得的XML进行解析然后显示,最笨的方法当然是自己解析XML节点树,然后进行处理并显示了。附带提一句,我在做一个OLAP系统的前台展示,就是用的前一种方法。因为OLAP系统的分析结果的XML形式固定。

3 对于基于命令的系统或者命令有限或者规则简单的系统,可以自行设计一套消息格式,在客户端与服务器端之间进行“编码->发送请求->解码->处理->发送结果“的游戏。这种玩法是我的LIVECHAT场景聊天室中采取的方式。这里面比较麻烦的是设计消息格式以及服务器端的编码、解码处理。如果可以,建议采用XMLRPC来实现。

也许还有其他方式的应用,我没有涉及到。但是,无论哪种方式,我们都可以看到,这些操作仅仅是前台表现层面的。对于业务逻辑,数据访问,权限控制等等,XMLHTTP有办法处理吗?

XMLHTTP仅仅是一种方式,一种无刷新与服务器进行交互的方式。他能够很大程度的改善web application的用户体验(而不是开发模式,更不谈开发效率)。实际上,在普通的web系统中采取xmlhttp是完全可行的,但是在需要实时操作的项目中(例如我的LiveChat),xmlhttp并不一定是最好的选择。因为创建一个xmlhttp/xmldom对象的开销比较大,假定每隔一秒向服务器发送消息,并用XMLDOM处理返回的xml节点,客户端不一定都能承受。我试着做了一些缓冲池,但是在IE环境下表现并不出色。

 

抱歉!评论已关闭.