java json传值到前台_json前后台传值

谈到JSON,简单的说就是一种数据交换格式。近年来,其在服务器之间交换数据的应用越来越广,相比XML其格式更简单、编解码更容易、扩展性更好,所以深受开发人员的喜爱。

下面简单的写一下在项目中前后台json传值的一个小例子,供大家参考、查阅。

一:前台传后台

1.前台jsp页面代码:

在index中将实体对象(自己创建即可)插入list中,再将list集合转化成json数组,利用post方式发送AJAX请求,将这个json数组发送至后台(servlet),再在后台进行解析即可。

index.jsp

My first json page

Athlete athlete1= newAthlete();

athlete1.setAthlete_id(1003);

athlete1.setAthlete_name("林丹");

athlete1.setAthlete_sex("男");

Date athlete_age1= format1.parse("1983-10-14");//是java.util.date

athlete1.setAthlete_age(athlete_age1);

athlete1.setCoach_id(101);

athlete1.setEvent_id(1);

athlete1.setService_status("1");

athlete1.setExperience("2013年第12届全运会男单冠军。");

Athlete athlete2= new Athlete();//记录2

athlete2.setAthlete_id(1004);

athlete2.setAthlete_name("鲍春来");

athlete2.setAthlete_sex("男");

Date athlete_age2= format1.parse("1988-10-14");

athlete2.setAthlete_age(athlete_age2);

athlete2.setCoach_id(101);

athlete2.setEvent_id(1);

athlete2.setService_status("1");

athlete2.setExperience("2011年亚洲羽毛球锦标赛亚军。");

List list1 = new ArrayList();

list1.add(athlete1);

list1.add(athlete2);

JsonConfig jsonConfig= new JsonConfig();//解决date类型的传输问题

jsonConfig.registerJsonValueProcessor(Date.class , newJsonDateValueProcessor());

JSONArray jsonarray=JSONArray.fromObject(list1, jsonConfig);%>

varxmlHttp;

function createXmlHttpRequest() {if(window.ActiveXObject) {

xmlHttp= new ActiveXObject("Microsoft.XMLHTTP");

}else if(window.XMLHttpRequest) {

xmlHttp= newXMLHttpRequest();

}

}//回调

function handleStateChange() {if (xmlHttp.readyState == 4) {if (xmlHttp.status == 200) {

parseResults();

}

}

}//将后台返回的数据显示在层serverResponse中

function parseResults() {var result=xmlHttp.responseXML.getElementsByTagName("result")[0].firstChild.data;

alert(result);

}

function doJSON() {var athletehead={athlete_id:1,tablename:"athlete"};var myobj=eval(athletehead);var str1=JSON.stringify(myobj);//str1以后可用来识别数据库中的表

var str2='';var url = "http://localhost:8080/com.badminton.servlet/JsonServer";

createXmlHttpRequest();

xmlHttp.open("POST", url, true);

xmlHttp.onreadystatechange= handleStateChange;//回调

xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;text/xml;charset=utf-8"); //text/xml;charset=utf-8:解决汉字封装json问题

xmlHttp.send("athletehead="+str1+"&athlete="+str2);//传送了两个对象

}

后台接受前台传来的json对象,解析插入数据库中,且反给前台一个是否成功的消息。具体插入数据库的代码自己编写一个即可。

JsonServer.java

package com.badminton.servlet;

import java.io.IOException;

import java.io.PrintWriter;

import java.sql.Date;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import com.badminton.app.AthleteAction;

import net.sf.json.JSONObject;

import net.sf.json.JSONArray;public classJsonServer extends HttpServlet {publicJsonServer() {

super();

}public voiddestroy() {

super.destroy();

}public voiddoGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {this.doPost(request, response);

}public voiddoPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/xml");

response.setHeader("Cache-Control", "no-cache");

response.setCharacterEncoding("UTF-8");

PrintWriterout =response.getWriter();

AthleteAction athleteaction=newAthleteAction();try{

String json1= request.getParameter("athletehead");//接收athlete表的头数据

String json2 = request.getParameter("athlete");//接收athlete表数据

json1 = java.net.URLDecoder.decode(json1,"UTF-8");

json2= java.net.URLDecoder.decode(json2, "UTF-8");if ((json1 != "") && (json2 != "")) {//System.out.println("json1:"+json1);

JSONObject jsonObject1 =JSONObject.fromObject(json1);//生成json对象

JSONArray jsonArray2 = JSONArray.fromObject(json2);//生成JSON数组

for(int i=0;i

JSONObject resultObj= jsonArray2.optJSONObject(i);//根据JSONArray生成JSONObject

int athlete_id=resultObj.getInt("athlete_id");

String athlete_name=resultObj.getString("athlete_name");

String athlete_sex=resultObj.getString("athlete_sex");

String age=resultObj.getString("athlete_age");

Date athlete_age= Date.valueOf(age);//转换成java.sql.Date//System.out.println(athlete_age);

int coach_id=resultObj.getInt("coach_id");int event_id=resultObj.getInt("event_id");

System.out.println(athlete_name);

String service_status=resultObj.getString("service_status");

String experience=resultObj.getString("experience");

athleteaction.athleteAdd(athlete_id,athlete_name,athlete_sex,athlete_age,coach_id,event_id,service_status,experience);//对数据库进行操作,具体代码未附

}

String result= "数据上传成功!";out.println("");out.println("" + result + "");out.println("");out.close();

}else{

String result= "传输过程出错,请重传!";out.println("");out.println("" + result + "");out.println("");out.close();

}

}catch(Exception e) {

System.out.println("JsonServer doPost(HttpServletRequest request, HttpServletResponse response) 报错:"

+e.getMessage());

}

}public voidinit() throws ServletException {

}

}

3.解决传递日期的一个工具类

若没有这个工具类,date型数据会被转化成json数组的格式,后台解析起来会很复杂。

JsonDateValueProcessor.java

package com.badminton.utils;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Locale;

import net.sf.json.JsonConfig;

import net.sf.json.processors.JsonValueProcessor;public classJsonDateValueProcessor implements JsonValueProcessor{/**

* datePattern*/

private String datePattern = "yyyy-MM-dd";/**

* JsonDateValueProcessor*/

publicJsonDateValueProcessor() {

super();

}/**

* @param format*/

publicJsonDateValueProcessor(String format) {

super();this.datePattern =format;

}/**

* @param value

* @param jsonConfig

* @return Object*/

publicObject processArrayValue(Object value, JsonConfig jsonConfig) {returnprocess(value);

}/**

* @param key

* @param value

* @param jsonConfig

* @return Object*/

publicObject processObjectValue(String key, Object value,

JsonConfig jsonConfig) {returnprocess(value);

}/**

* process

* @param value

* @return*/

privateObject process(Object value) {try{if(value instanceof Date) {

SimpleDateFormat sdf= newSimpleDateFormat(datePattern,

Locale.UK);returnsdf.format((Date) value);

}return value == null ? "": value.toString();

}catch(Exception e) {return "";

}

}/**

* @return the datePattern*/

publicString getDatePattern() {returndatePattern;

}/**

* @param pDatePattern the datePattern to set*/

public voidsetDatePattern(String pDatePattern) {

datePattern=pDatePattern;

}

}

二:后台传前台

后台以list和map两种形式封装json,前台注意json数组和json对象解析时的差别即可。

1.TestJson.java

package com.badminton.servlet;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Map;

import java.util.List;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;

import net.sf.json.JSONObject;public classTestJson extends HttpServlet {public voiddoGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doPost(request,response);

}public voiddoPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.setContentType("text/html");

String str= request.getParameter("name");//得到ajax传递过来的paramater

System.out.println(str);

PrintWriterout =response.getWriter();

List list= new ArrayList();//传递List//Map m=new HashMap();//传递Map

User u1=newUser();

u1.setUsername("zah");

u1.setPassword("123");

User u2=newUser();

u2.setUsername("ztf");

u2.setPassword("456");

list.add(u1);//添加User对象

list.add(u2); //添加User对象//m.put("u1", u1);//m.put("u2", u2);

JSONArray jsonArray2 = JSONArray.fromObject( list );//转化成json对象//JSONObject jo=JSONObject.fromObject(m);//转化Map对象

out.print(jsonArray2);//返给ajax请求

System.out.println(jsonArray2);//out.print(jo);//返给ajax请求

}

}

2.showjson.jsp

利用Jquery、AJAX异步传输的方式接受后台的发送请求。

$.ajax({

type:"POST", //请求方式

url:"servlet/TestJson",//请求路径

cache: false,

data:"name=zah", /传参

dataType:'json',//返回值类型

success:function(json){

alert(json[1].username+" "+ json[1].password);//弹出返回过来的List对象

}

});

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值