补充问题:比如用的是Struts1 在Action类 一般都用request。setAttribute(list<T>) 用的是Struts2 直接在Action类定义private List<T> list 页面直接可以接收到这个list 问题是:为啥有的项目里非要用JsonObject来 JSONObject json = JSONObject.fromObject(list); System.out.println(json.toString()); //结果为:{"name":"hzucmj","age":22}??有啥区别
JsonObject 就是常说的 json。
是一种重要的数据传输对象。
其格式为{"key1":value1,"key2",value2....};key 必须是字符串。
很像map对不对,一个key,一个value。
因为ajax请求不刷新页面,但配合js可以实现局部刷新,因此json常常被用来作为异步请求的返回对象使用。
通过response.getWriter()获取PrintWriter pw,然后pw.print(json)。
如果没有设置response.setContentType("application/json; charset=utf-8");
则需要自己再js中进行解析。
举例说明:
1
2
3
4
5
6
7
8
9
10
11
|
response.setContentType(
"application/json; charset=utf-8"
);
PrintWriter pw = response.getWriter();
Student s =
new
Student(。。。);
//反正就是构造一个对象,有没有数据无所谓
JSONObjet json = JSONObjet .from(s);
//将s转化成json对象。
pw .print(json);
pw .flush();
pw .close();
这样这个json对象就传到你发送请求的那个jsp上面。
而$.post(url,datas.function(data){})这里的data就是后台返回的值,也就是这里的json
只需要 var json = data;
//就获取到了。
再取得原来Student的属性 var name = json.name(student 的name 属性);
|
比较request.setAttribute("key",value);
这个必须配合forwoar来转发跳转到需要这个value的jsp页面。页面刷新。
附:
maven管理json 的jar包
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier><!--如果出现导不了包,加上这句,具体原因参考https://blog.csdn.net/qqqqqq654/article/details/53425775-->
</dependency>
Java中交互方式分为同步和异步两种:
同步交互:指发送一个请求,需要等待返回,然后才能够发送下一个请求,有个等待过程;
异步交互:指发送一个请求,不需要等待返回,随时可以再发送下一个请求,即不需要等待。 区别:一个需要等待,一个不需要等待,在部分情况下,我们的项目开发中都会优先选择不需要等待的异步交互方式。
哪些情况建议使用同步交互呢?比如银行的转账系统,对数据库的保存操作等等,都会使用同步交互操作,其余情况都优先使用异步交互。(收藏自百度问题https://zhidao.baidu.com/question/2203418284898439108.html)