JSON前台与后台的交互

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;
	}
前台的处理结果如下:


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值