实例解析java + jQuery + json工作过程(转)
    本文主要讲解在java环境下使用jQuery进行JSON数据传送的交互过程
参考根据作者的账务管理系统(个人版) 源码下载 讲解
一、相关技术、工具简介
1、简单介绍一下JSON,JSON是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。已键值对形式表示数据,和java中的Map的数据存储形式相似,具体细节请参考http://www.json.org/json-zh.html。
2、对应后台JSON的数据处理工具json-lib,包含各种格式数据的工具类,比如:JavaBean、数组、集合(Collection)等,参考API文档。
3、jQuery框架中的数据表现形式,如果你熟悉jQuery的话就会发现jQuery的使用的数据传输都是JSON格式,比如我们经常使用的$.ajax方法:
$.ajax({
	url : url,
	data : {
		id : chkValue
	},
	cache : false,
	dataType : "json",
	success : function(result){
		alert(result);
	}
);
其中 {…} 表示的就是JSON格式的数据
二、前台工作方式
为了能够容易理解以系统登录讲解,最后会以一个实例的方式讲解
1、登录页面
代码请参见 http://code.google.com/p/finance-p/source/browse/trunk/login.jsp
用户名:
<input id="loginName" name="loginName" size="20" type="text" /> 
密码:
<input id="password" name="password" size="20" type="password" />
2、登录javascript文件 login.js
/**
 * 设置表单验证规则
 */
function regFormValidator() {
	$.formValidator.initConfig({formid:"loginForm"});
	$("#loginName").formValidator({
		onshow : "请输入用户名",
		onfocus : "用户名至少2个字,最多4个字"
	}).inputValidator({
		min : 1,
		onerror : "你输入的用户名非法,请确认"
	}); 
	$("#password").formValidator({
		onshow : "请输入密码"
	}).inputValidator({
		min : 6,
		onerror : "密码在6位以上,请确认"
	});
} 
$(function() {
	// 注册表单验证插件
	regFormValidator(); 
	$('#submit').click(function(){
		// 验证输入的用户名、密码是否正确
		var valid = jQuery.formValidator.pageIsValid('1');
		if (valid) {
			$(this).attr('value', '正在登录……').attr('disabled', true);
		} else {
			return;
		} 
		// 发送请求
		$.ajax({
			url	: 'login.do',
			data	: { loginName:$('#loginName').val(), password: $('#password').val() },
			success : function(result){
				// 根据result返回信息判断是否登录成功
				if(result && result == 'success') {
					window.location.href = 'index.jsp';
				} else {
					alert('登录失败,用户名或密码错误,请重试!');
				}
			}
		}); 
	});
});
这样当点击“登录”按钮的时候触发ajax请求:
验证表单完整性
发送ajax请求到后台,值通过data键已JSON格式传送至后台
如果后台返回的result为success时表示登录成功,页面跳转至首页index.jsp
三、后台工作方式
后台要比前台操作复杂一些,以为涉及到数据库、编码或者一些业务逻辑
1、获得请求参数
有两种方式:
通过request.getParameter(“key”)的方式
通过json-lib工具包获取
这我们主要讲解怎么通过json-lib获取参数
首先我们来写一个公共的方法,可以返回一个net.sf.json.JSONObject对象,具体代码如下:
/**
 * 读取请求参数转换JSONObject对象
 *
 * @param request HttpServletRequest 对象
 * @return json格式的String对象
 * @throws Exception
 */
@SuppressWarnings("unchecked")
protected JSONObject readJson(HttpServletRequest request) throws Exception {
	JSONObject jsonObject = new JSONObject();
	try {
		Map parameterMap = request.getParameterMap();
                // 通过循环遍历的方式获得key和value并set到JSONObject中
		Iterator paIter = parameterMap.keySet().iterator();
		while (paIter.hasNext()) {
			String key = paIter.next().toString();
			String[] values = (String[])parameterMap.get(key);
			jsonObject.accumulate(key, values[0]);
		}
		log.debug("从客户端获得json=" + jsonObject.toString());
	} catch (Exception e) {
		log.error("获取json数据出错,错误信息如下:nt" + e.getMessage());
		e.printStackTrace();
		throw e;
	}
	return jsonObject;
}
通过这个方法我们可以获得一个JSONObject对象,然后就可以通过key获得对应的value;
2、登录处理Action
public ActionForward login(ActionMapping mapping, ActionForm actionForm,
             HttpServletRequest request,HttpServletResponse response) throws Exception {<