JSON前台与后台的交互

来源:互联网 发布:ubuntu如何接入pppoe 编辑:程序博客网 时间:2024/05/24 06:38

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 onload="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);//向前台传递数组,数组中元素为stringwriter.println(listPersonArray);//向前台传递数组 数组中元素为jsonwriter.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);//向前台传递数组,数组中元素为jsonwriter.println(mapPersonJSON);//向前台传递数组 数组中元素为jsonwriter.flush();return null;}
前台的处理结果如下:


0 0