个人网站的搭建,西安国内做网站的公司有哪些,深圳建网站服务商,软件 网站模板谈到JSON,简单的说就是一种数据交换格式。近年来#xff0c;其在服务器之间交换数据的应用越来越广#xff0c;相比XML其格式更简单、编解码更容易、扩展性更好#xff0c;所以深受开发人员的喜爱。 下面简单的写一下在项目中前后台json传值的一个小例子#xff0c;供大家参… 谈到JSON,简单的说就是一种数据交换格式。近年来其在服务器之间交换数据的应用越来越广相比XML其格式更简单、编解码更容易、扩展性更好所以深受开发人员的喜爱。 下面简单的写一下在项目中前后台json传值的一个小例子供大家参考、查阅。 一前台传后台 1.前台jsp页面代码 在index中将实体对象自己创建即可插入list中再将list集合转化成json数组利用post方式发送AJAX请求将这个json数组发送至后台servlet再在后台进行解析即可。 index.jsp % page languagejava importjava.util.Date,com.badminton.utils.JsonDateValueProcessor,java.text.SimpleDateFormat,java.util.List,net.sf.json.JSONArray,net.sf.json.JSONObject,net.sf.json.JsonConfig,java.util.ArrayList,com.badminton.entity.Athlete,net.sf.json.JSONObject pageEncodingutf-8%
!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN
html
head
titleMy first json page/title
%SimpleDateFormat format1 new SimpleDateFormat(yyyy-MM-dd);Athlete athlete1 new Athlete();athlete1.setAthlete_id(1003);athlete1.setAthlete_name(林丹);athlete1.setAthlete_sex(男);Date athlete_age1 format1.parse(1983-10-14);//是java.util.dateathlete1.setAthlete_age(athlete_age1);athlete1.setCoach_id(101);athlete1.setEvent_id(1);athlete1.setService_status(1);athlete1.setExperience(2013年第12届全运会男单冠军。);Athlete athlete2 new Athlete();//记录2athlete2.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年亚洲羽毛球锦标赛亚军。);ListAthlete list1 new ArrayListAthlete();list1.add(athlete1);list1.add(athlete2); JsonConfig jsonConfig new JsonConfig();//解决date类型的传输问题jsonConfig.registerJsonValueProcessor(Date.class , new JsonDateValueProcessor());JSONArray jsonarray JSONArray.fromObject(list1, jsonConfig);
%
script typetext/javascript srcjs/json2.js/script
script typetext/javascriptvar xmlHttp;function createXmlHttpRequest() {if (window.ActiveXObject) {xmlHttp new ActiveXObject(Microsoft.XMLHTTP);} else if (window.XMLHttpRequest) {xmlHttp new XMLHttpRequest();}}//回调function handleStateChange() {if (xmlHttp.readyState 4) {if (xmlHttp.status 200) {parseResults();}}}//将后台返回的数据显示在层serverResponse中function parseResults() {var resultxmlHttp.responseXML.getElementsByTagName(result)[0].firstChild.data;alert(result);}function doJSON() {var athletehead{athlete_id:1,tablename:athlete};var myobjeval(athletehead); var str1JSON.stringify(myobj);//str1以后可用来识别数据库中的表var str2%jsonarray%;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;charsetutf-8); //text/xml;charsetutf-8解决汉字封装json问题xmlHttp.send(athleteheadstr1athletestr2);//传送了两个对象}
/script
/head
body
form idform1
tabletrtd aligncenterinput typebutton namesubmit value提交 onClickdoJSON()/td/tr
/table
/form
/body
/html 后台接受前台传来的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 class JsonServer extends HttpServlet {public JsonServer() {super();}public void destroy() {super.destroy();}public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType(text/xml);response.setHeader(Cache-Control, no-cache);response.setCharacterEncoding(UTF-8);PrintWriter out response.getWriter();AthleteAction athleteactionnew AthleteAction();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 i0;ijsonArray2.size();i){JSONObject resultObj jsonArray2.optJSONObject(i);//根据JSONArray生成JSONObjectint athlete_idresultObj.getInt(athlete_id);String athlete_nameresultObj.getString(athlete_name);String athlete_sexresultObj.getString(athlete_sex);String ageresultObj.getString(athlete_age);Date athlete_age Date.valueOf(age);//转换成java.sql.Date//System.out.println(athlete_age);int coach_idresultObj.getInt(coach_id);int event_idresultObj.getInt(event_id);System.out.println(athlete_name);String service_statusresultObj.getString(service_status);String experienceresultObj.getString(experience);athleteaction.athleteAdd(athlete_id,athlete_name,athlete_sex,athlete_age,coach_id,event_id,service_status,experience);//对数据库进行操作具体代码未附}String result 数据上传成功;out.println(response);out.println(result result /result);out.println(/response);out.close();} else{String result 传输过程出错请重传;out.println(response);out.println(result result /result);out.println(/response);out.close();}} catch (Exception e) {System.out.println(JsonServer doPost(HttpServletRequest request, HttpServletResponse response) 报错 e.getMessage());}}public void init() 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 class JsonDateValueProcessor implements JsonValueProcessor{/*** datePattern*/private String datePattern yyyy-MM-dd;/*** JsonDateValueProcessor*/public JsonDateValueProcessor() {super();}/*** param format*/public JsonDateValueProcessor(String format) {super();this.datePattern format;}/*** param value* param jsonConfig* return Object*/public Object processArrayValue(Object value, JsonConfig jsonConfig) {return process(value);}/*** param key* param value* param jsonConfig* return Object*/public Object processObjectValue(String key, Object value,JsonConfig jsonConfig) {return process(value);}/*** process* param value* return*/private Object process(Object value) {try {if (value instanceof Date) {SimpleDateFormat sdf new SimpleDateFormat(datePattern,Locale.UK);return sdf.format((Date) value);}return value null ? : value.toString();} catch (Exception e) {return ;}}/*** return the datePattern*/public String getDatePattern() {return datePattern;}/*** param pDatePattern the datePattern to set*/public void setDatePattern(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 class TestJson extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType(text/html);String str request.getParameter(name);//得到ajax传递过来的paramaterSystem.out.println(str);PrintWriter out response.getWriter();List list new ArrayList();//传递List//Map mnew HashMap();//传递Map User u1new User();u1.setUsername(zah);u1.setPassword(123);User u2new User(); 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 joJSONObject.fromObject(m);//转化Map对象out.print(jsonArray2);//返给ajax请求System.out.println(jsonArray2);//out.print(jo);//返给ajax请求
}
} 2.showjson.jsp 利用Jquery、AJAX异步传输的方式接受后台的发送请求。 % page languagejava importjava.util.* pageEncodingutf-8%
!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN
htmlhead
script typetext/javascript srcjs/jquery-1.4.2.min.js/script
script typetext/javascriptfunction test(){$.ajax({type:POST, //请求方式url:servlet/TestJson,//请求路径cache: false, data:namezah, /传参dataType: json,//返回值类型success:function(json){ alert(json[1].username json[1].password);//弹出返回过来的List对象}});}
/script/headbodyinput typebutton nameb value测试/body
/html