在以前的项目中曾经使用过一个ajax的模式,可以从前台传查询语句并获得该查询的结果数组。使用方法类似于下面的代码:
var queryStr="select * from some_table where id='1'";
var queryResult=executeQuery(queryStr);
for(var i=0;i<queryResult["id"].length;i++){
var id=queryResult["id"][i];
dummy(id);//business behavior
}
这曾经大大加快了我开发的速度,但是有一个致命的弱点就是暴露了业务逻辑。关于这一点我的解决方法是将处理业务的js代码放入另一个jsp文件中,在使用的时候用<script src="javascript.jsp"/>嵌入进来。这样可以简单地控制一些访问的权限问题。但是在权限要求高的时候,需要在页面写大量的代码来过滤,反而占用了开发时间,仿佛有些舍本求末了。
于是我便产生了另外一个想法。
标准Web开发的缺点在于Http协议的无状态性,用户和系统的一次对话被做成一个请求和一个响应,所以所有独立事务被依次执行。于是中间会有许多数据的传输、转换、解析,如此必将消耗大量的程序开发时间和系统处理时间。
而AJAX的异步性使得这些事务的并发执行成为可能,且不用丢失页面的数据。于是我做了一个Ajax框架,其处理流程描绘在下面的图中:
其思想是前后端通过xml交换数据。
处理流程为:
js传actionID到后台servlet----->后台处理返回一个object并序列化为xml文档------>前台解析xml文档为js object----->处理js object
在我的实现中,主要解决了下面几个问题:
1. 众所周知,HttpRequest的工作方式是为其改变状态定义一个触发器函数(onstatechange=process()),问题是如何将this指针绑定到该函数。
2.java对object的xml格式序列化
3.javascript对xmlDocument的解析