1.首先介绍下Json 。
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它基于JavaScript。
它是一个“名称/值”对的集合。形式如 "username":"zhangbreeze" 这个key为username ,value为zhangbreeze
由{ } 代表一个对象,里面包含一个对象。
由[ ] 代表一个数组,里面包含多个对象。
//看看下面的例子,表示一个json对象,包含了username,age属性,info对象,address数组对象
// index.jsp
var user = {
"username" : "andy",
"age" : 20,
"info" : {
"tel" : "123456",
"cellphone" : "98765"
},
"address" : [ {
"city" : "beijing",
"postcode" : "222333"
}, {
"city" : "newyork",
"postcode" : "555666"
} ]
};
//使用json对象,直接通过user.username即可,user.info.tel user.address[0].city
下面介绍下如何在Servlet中使用Json
1.首先需要将几个必须的包导入工程中。
其中1到5 是 json-lib-2.2.3-jdk15.jar 的依赖包,必须导入。
1.commons-beanutils-1.8.0.jar //是对bean操作的类,可以访问类的属性及GET和SET方法,映射成json对象
2.commons-collections-3.2.1.jar //包含了一些Apache开发的集合类,功能比java.util.*强大
3.commons-lang-2.4.jar //包含了一些数据类型工具类,是java.lang.*的扩展
4.commons-logging-1.1.1.jar //是输出LOG用的
5.ezmorph-1.0.6.jar //json和java转化的辅助工具
6.json-lib-2.2.3-jdk15.jar //json和java转化的辅助工具
更多jar包信息参照 工程中jar功能对照表
2.创建一个user的Bean对象(id,username),创建servlet工程并注册.
3.将创建的user对象转换为json数据格式
PrintWriter out = response.getWriter();
User user = new User(1,"福州");
JSONObject jsonObject = JSONObject.fromObject(cityBean);
//如果是Json数组的话,调用JSONArray jsonArray = JSONArray.fromObject(cityBeans);
out.println(jsonObject);
out.flush();
out.close();
4.在页面将接收到的文本转换为json数据类型
var text = request.responseText;
//文本转换成json对象为{"id":1,"username":"福州"}
var json = text.evalJSON();
alert("json="+json);
//$("testId").value=json.id;
接下来介绍下Struts中使用JSON数据格式。
1.创建一个web工程,导入struts所需包,不需要导入上述的包了,只需导入一个 struts2-json-plugin-2.1.8.1.jar,搭好框架。
2.在struts.xml中,创建package 需要继承json-default,而json-default也继承了struts-default,只是添加了几个属性而已
<!-- 当action以json格式响应数据时 必须继承自json的默认包 -->
<!-- extends="json-default" -->
<package name="testJson_pack" extends="json-default" namespace="/testJsonName">
<action name="testJsonAction" class="sf.lesson07.action.TestJsonAction">
<!-- type="json" action返回的类型为json -->
<result name="userBean" type="json" />
<result name="list" type="json" />
</action>
</package>
3.同样创建一个userBean对象(id,username),然后在action中
private UserBean userBean = null;
private List<String> list = null;
private String username;
//以及他们的get & set方法,json拦截器会自动调用get方法转换成json格式
//页面请求list方法,返回一个list数组对象
//@JSON(name="StringList") //指定响应的时候{name:{}}
public String list() throws Exception {
list = new ArrayList<String>();
list.add("hhh");
list.add("jjj");
list.add("kkk");
return "list";
}
Ps: 这里我们 返回的是调用所有get方法,并生成他们对象的json对象。
4.在页面中接收到的是一个json数组,包含了多个对象,有list数组,userBean对象,以及username属性
var text = request.responseText;
alert(text);
var json = text.evalJSON();
alert(json);
$("password").value = json.list[0]; //json.userBean.id; //json.username;
错误解决: org.apache.struts2.json.JSONException: java.lang.reflect.InvocationTargetException
注意: 用struts json的时候。对不必要的get方法我们要屏蔽掉,比如dao层或者service层的方法,都要忽略掉,或者加上这么一句话 @JSON(serialize = false) public IUserDao getUserDao() { return userDao; }
不然会报错org.apache.struts2.json.JSONException: java.lang.reflect.InvocationTargetException
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它基于JavaScript。
它是一个“名称/值”对的集合。形式如 "username":"zhangbreeze" 这个key为username ,value为zhangbreeze
由{ } 代表一个对象,里面包含一个对象。
由[ ] 代表一个数组,里面包含多个对象。
//看看下面的例子,表示一个json对象,包含了username,age属性,info对象,address数组对象
// index.jsp
var user = {
"username" : "andy",
"age" : 20,
"info" : {
"tel" : "123456",
"cellphone" : "98765"
},
"address" : [ {
"city" : "beijing",
"postcode" : "222333"
}, {
"city" : "newyork",
"postcode" : "555666"
} ]
};
//使用json对象,直接通过user.username即可,user.info.tel user.address[0].city
下面介绍下如何在Servlet中使用Json
1.首先需要将几个必须的包导入工程中。
其中1到5 是 json-lib-2.2.3-jdk15.jar 的依赖包,必须导入。
1.commons-beanutils-1.8.0.jar //是对bean操作的类,可以访问类的属性及GET和SET方法,映射成json对象
2.commons-collections-3.2.1.jar //包含了一些Apache开发的集合类,功能比java.util.*强大
3.commons-lang-2.4.jar //包含了一些数据类型工具类,是java.lang.*的扩展
4.commons-logging-1.1.1.jar //是输出LOG用的
5.ezmorph-1.0.6.jar //json和java转化的辅助工具
6.json-lib-2.2.3-jdk15.jar //json和java转化的辅助工具
更多jar包信息参照 工程中jar功能对照表
2.创建一个user的Bean对象(id,username),创建servlet工程并注册.
3.将创建的user对象转换为json数据格式
PrintWriter out = response.getWriter();
User user = new User(1,"福州");
JSONObject jsonObject = JSONObject.fromObject(cityBean);
//如果是Json数组的话,调用JSONArray jsonArray = JSONArray.fromObject(cityBeans);
out.println(jsonObject);
out.flush();
out.close();
4.在页面将接收到的文本转换为json数据类型
var text = request.responseText;
//文本转换成json对象为{"id":1,"username":"福州"}
var json = text.evalJSON();
alert("json="+json);
//$("testId").value=json.id;
接下来介绍下Struts中使用JSON数据格式。
1.创建一个web工程,导入struts所需包,不需要导入上述的包了,只需导入一个 struts2-json-plugin-2.1.8.1.jar,搭好框架。
2.在struts.xml中,创建package 需要继承json-default,而json-default也继承了struts-default,只是添加了几个属性而已
<!-- 当action以json格式响应数据时 必须继承自json的默认包 -->
<!-- extends="json-default" -->
<package name="testJson_pack" extends="json-default" namespace="/testJsonName">
<action name="testJsonAction" class="sf.lesson07.action.TestJsonAction">
<!-- type="json" action返回的类型为json -->
<result name="userBean" type="json" />
<result name="list" type="json" />
</action>
</package>
3.同样创建一个userBean对象(id,username),然后在action中
private UserBean userBean = null;
private List<String> list = null;
private String username;
//以及他们的get & set方法,json拦截器会自动调用get方法转换成json格式
//页面请求list方法,返回一个list数组对象
//@JSON(name="StringList") //指定响应的时候{name:{}}
public String list() throws Exception {
list = new ArrayList<String>();
list.add("hhh");
list.add("jjj");
list.add("kkk");
return "list";
}
Ps: 这里我们 返回的是调用所有get方法,并生成他们对象的json对象。
4.在页面中接收到的是一个json数组,包含了多个对象,有list数组,userBean对象,以及username属性
var text = request.responseText;
alert(text);
var json = text.evalJSON();
alert(json);
$("password").value = json.list[0]; //json.userBean.id; //json.username;
错误解决: org.apache.struts2.json.JSONException: java.lang.reflect.InvocationTargetException
注意: 用struts json的时候。对不必要的get方法我们要屏蔽掉,比如dao层或者service层的方法,都要忽略掉,或者加上这么一句话 @JSON(serialize = false) public IUserDao getUserDao() { return userDao; }
不然会报错org.apache.struts2.json.JSONException: java.lang.reflect.InvocationTargetException