问题:在部分要使用交互性较好的网站开发中,前台使用Jquery、Ext等框架的情况下,数据的异步传输使用的是Json比较适合异步式网络交付的一种数据格式:
注:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。
1、客服端提交访问请求
在Ext中,我们使用Ext提供的特殊的Ajax来讲客服端数据(主要是表单数据)传入后台服务端的Controller,简单一个删除按钮操作的Ext框架写法如下:
Ext.Ajax.request({
url : './DelServlet',
//参数传入
params : {roomids:ids},
waitTitle : '请稍候',
waitMsg : '系统正在提交该任务,请稍候...',
success : function(response) {
//返回的Json数据对象
var msg = Ext.decode(response.responseText);
Ext.MessageBox.alert("提示",msg.msg);
ds.reload({params : {start : 0,limit : page}});
},
failure : function() {
Ext.MessageBox.alert("提示","您出错啦,请慢慢检查...");
}
});
以上ajax处理块放在一个panel中的tbar中。
2、控制层接受请求并处理
上面的请求到达DelServlet所指示的控制层后,在Servlet中使用Request接受传入的参数和数据,传入的参数可能是一个数组类型对象,再使用对应的服务层组件和Dao层结合处理业务逻辑,比如删除,删除成功后我们再通知客服端将会将Json对象的数据发送,
ResponseUtils.renderJson(rp, "{\"success\":true,msg:\""+"删除成功!"+"\"}");
上面的renderJson()方法将封装好一遍达到扩展性如下:
public static void render(HttpServletResponse response,String text) {
response.setContentType("application/json;charset=UTF-8");
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
try {
if(StringUtils.isBlank(text)){
text="";
}
response.getWriter().write(text);
response.getWriter().flush();
response.getWriter().close();
} catch (IOException e) {
log.error(e.getMessage());
if(!"class org.apache.catalina.connector.ClientAbortException".equals(e.getClass().toString()))
e.printStackTrace();
}
}
这样,成功删除的结果是返回msg=删除成功,和success=true
关于采用Ext执行较为复杂的查询数据库并且将数据列表显示出来,下一节详细记录之。