在jsp+servlet的项目中,可以使用json来进行前后台的传值。
首先在servlet中将DAO中取出的数据用StringBuffer拼装成json串的格式,例如"{\"user_id\":\"001\",\"user_name\":\"张三\",\"password\":\"****"}",(字符串里面的"要使用转义字符\"否则在编译的时候会把整个字符串切断,造成异常)
创建方法(这里使用的是org.json.JSONObject类)是:
比如说DAO中有一个方法可以返回这个StringBuffer ; 方法名是getValues();
//首先取得获取的json字符串,现在它知识一个String
String jsonString = dao.getValues().toString;//因为返回的是StringBuffer所以需要toString() 一下。
//这里需要判断是否为空,防止异常出现。
JSONObject json = new JSONObject(jsonString);
//这样就把String转换成了json对象。如果又抛出异常,一般都是字符串内格式有问题。
之后在取值的时候只需要:
if(!json.isNull("user_id")){
String userId = json.get("user_id");
}
...
...
为什么要这么写?
因为在我的工作中需要大量的操作json,而且数据库中也常常会存入一个json格式的字符串,这样,如果我拿来那个StringBuffer然后按照一定规则去截取字符串来获取需要的值的话会收到很多影响,冒号、逗号等问题。所以直接在servlet中转换成json对象,我只需要知道对应的key就可以更方便的操作这些数据。
同样,在存入数据库的时候也可以这样操作。
首先获取前台传入的字符串。
String jsonString = request.getParameter("jsonString");
JSONObject json = null;
if(null!=jsonString&&"".equals(jsonString))//null写在前面是防止jsonString空指针异常的最有效办法。
{
json = new JSONObject(jsonString);
}
//将这个json传入DAO中。要看DAO中是否有对应的方法,也可以将json中的数据取出再传入。
int count = dao.saveArg(json);
return count;
---这里我传入的是json--------在DAO中需要取出数据并保存-----(以下方法都是简写,省略修饰符,不要理解成js哦)
saveArg(JSONObject json){
String user_id = json.get("userId");
String user_name = json.get("userId");
...
..//取得json中的数据
.
String sql = "insert into t_user(user_id,user_name,password) values(" ' "+user_id +" ' ".......)";
最后得到需要的sql即可。
}
当然以上需要考虑乱码问题,每个地方解决乱码的方式不同,灵活运用即可