1、POST方式提交
将JSON使用ajax的post方式提交,提交的前台代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>json的使用</title>
</head>
<body οnlοad="init()">
</body>
<script type="text/javascript" src="./../js/jquery-2.1.4.js"></script>
<script type="text/javascript" src="./../js/json2.js"></script>
<script type="text/javascript">
function init(){
var person = new Person("张三",26);
$.ajax({
url:"json.action",
data:{jsonString:JSON.stringify(person)},
type:"POST",
success:function(data){
document.write(JSON.stringify(data));
}
});
}
function Person(username,age){
this.name= username;
this.age = age;
}
</script>
</html>
在后台接受前台传递的参数,由于使用JSON进行解析,因此需要使用json-lib的jar包,使用Maven下载的依赖如下:
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.3</version>
<classifier>jdk15</classifier><!-- jdk1.5及其以上使用 -->
</dependency>
</dependencies>
后台对前台传递的参数进行解析,并将解析的JSON格式传递给前台,代码如下:
package com.struts.service;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import org.apache.struts2.ServletActionContext;
import net.sf.json.JSONObject;
/**
* @TODO TODO
* @author Administrator
* @date 2015年9月15日 下午9:24:16
* @version 1.0
*/
public class JsonService {
private String jsonString ;
public String getJsonString() {
return jsonString;
}
public void setJsonString(String jsonString) throws UnsupportedEncodingException {
this.jsonString = jsonString;
}
public String execute() throws IOException{
JSONObject json = JSONObject.fromObject(jsonString);//转换为JSON对象
System.out.println(json.get("name") + "," + json.get("age"));//使用get()方法获取value值
ServletActionContext.getResponse().setCharacterEncoding("utf-8");//设置编码,否则返回给前台出现乱码
PrintWriter writer = ServletActionContext.getResponse().getWriter();
writer.print(json);//向前台传递参数,返回给Ajax的参数
writer.flush();
return null;//不进行重定向或者转发,只是将结果传递给前台
}
}
则在页面加载完毕后,会发起json.action的post请求,请求参数和响应的结果如下图所示:
2、使用GET方式提交
在使用GET方式提交时,传递到后台的参数如果含有中文则会出现乱码,因此需要对其进行处理,处理方式为如下:
public void setJsonString(String jsonString) throws UnsupportedEncodingException {
this.jsonString = new String(jsonString.getBytes("ISO-8859-1"),"UTF-8");//当使用get方式提交需要进行转码
}
这样,传递给后台的参数可以正确解析,参见下图:
3、在后台处理list集合,转换成数组并传递给前台。分别处理list集合中元素为String和对象的情况。
后台代码如下:
public String execute() throws IOException{
JSONObject json = JSONObject.fromObject(jsonString);
System.out.println(json.get("name") + "," + json.get("age"));
//将list<String>集合转换为数组
List<String> list = new ArrayList<String>();
list.add("lsit1");
list.add("lsit2");
list.add("lsit3");
JSONArray listString = JSONArray.fromObject(list);
//list中封装对象
List<Person> listPerson = new ArrayList<Person>();
listPerson.add(new Person("张三",20));
listPerson.add(new Person("李四",25));
JSONArray listPersonArray = JSONArray.fromObject(listPerson);
ServletActionContext.getResponse().setCharacterEncoding("utf-8");//设置编码,否则返回给前台出现乱码
PrintWriter writer = ServletActionContext.getResponse().getWriter();
writer.println(json);//向前台传递参数,返回给Ajax的参数
writer.println(listString);//向前台传递数组,数组中元素为string
writer.println(listPersonArray);//向前台传递数组 数组中元素为json
writer.flush();
return null;
}
返回给前台的结果如下:
4、后台处理map集合,主要分为value为字符串和对象两种情况,后台代码如下:
public String execute() throws IOException{
JSONObject json = JSONObject.fromObject(jsonString);
System.out.println(json.get("name") + "," + json.get("age"));
Map<String,String> map = new HashMap<String, String>();
map.put("key1", "value1");
map.put("key2", "value2");
JSONArray stringMap = JSONArray.fromObject(map);
Map<String,Person> mapPerson = new HashMap<String, Person>();
mapPerson.put("key1", new Person("张三",20));
mapPerson.put("key2", new Person("李四",25));
JSONArray mapPersonJSON = JSONArray.fromObject(mapPerson);
ServletActionContext.getResponse().setCharacterEncoding("utf-8");//设置编码,否则返回给前台出现乱码
PrintWriter writer = ServletActionContext.getResponse().getWriter();
writer.println(stringMap);//向前台传递数组,数组中元素为json
writer.println(mapPersonJSON);//向前台传递数组 数组中元素为json
writer.flush();
return null;
}
前台的处理结果如下: