发表于: 2017-09-14 21:56:03
1 684
一.今天完成的事情
1.主要准备小课堂相关
小课堂所讲的内容是为什么使用json-taglib生成json数据
首先了解json-taglib的用法
首先加入jar包,该jar包在maven仓库中没有依赖,所以要从官网中下载下来jar包,手动添加到项目中
其次,要在jsp页面中加入标签声明
<%@ taglib prefix="json" uri="http://www.atg.com/taglibs/json" %>
然后在控制器中将java对象传递到jsp页面,控制器代码为
//第二种方式,即在控制器中返回对象,在jsp页面中将其转换为json对象
@RequestMapping (value="/json2", method= RequestMethod.GET)
public String jsonDemo3(ModelMap model){
model.addAttribute("user", this.user);
model.addAttribute("student", this.student);
model.addAttribute("code", -1);
model.addAttribute("message","无效的参数");
List<User> list = new ArrayList<User>();
list.add(this.user);
model.addAttribute("list", list);
return "json";
}
然后在jsp页面中使用json-taglib标签,json-taglib标签包括三个基本标签,,json:object,表示json数据对象;json:property,表示json对象中的属性;json:array,表示json数组,对象中可以有数组,数组中也可以有对象,可以使用这三个标签的嵌套生成各种格式的json数据,完全可以满足我们开发的需求
jsp代码如下:
<json:object>
<%--这一部分是User对象的部分字段--%>
<json:property name="id" value="${user.id}"/>
<json:property name="password" value="${user.password}"/>
<json:property name="phoneNumber" value="${user.phoneNumber}"/>
<json:property name="email" value="${user.email}"/>
<json:property name="test" value="${temp}"/>
<%--这一部分是Student对象的部分字段--%>
<json:property name="studentSex" value="${student.sex}"/>
<json:property name="studentProfession" value="${student.profession}"/>
<%--这一部分是列表--%>
<json:array name="items" items="${list}" var="item">
<json:object>
<json:property name="userId" value="${item.id}"/>
<json:property name="userPassword" value="${item.password}"/>
<json:property name="userPhoneNumber" value="${item.phoneNumber}"/>
<json:property name="userEmail" value="${item.email}"/>
<json:property name="loginAt" value="${item.loginAt}"/>
<json:property name="createAt" value="${item.createAt}"/>
</json:object>
</json:array>
<%--这一部分是常见的返回的code和message--%>
<json:property name="code" value="${code}"/>
<json:property name="message" value="${message}"/>
</json:object>
得出的json数据格式为
此外,经过测试,jsp页面定义的变量和JSONObject对象也可以传递到标签中,作为json数据的组成部分
然后是,如果没有json-taglib标签,使用@Response注解实现
返回相同格式的json数据,控制器代码为
//第一种方式:注解的方式
@RequestMapping (value="/json1", method= RequestMethod.GET)
public @ResponseBody JSONObject jsonDemo2(){
JSONObject jsonObject = new JSONObject();
try {
//将User对象的部分内容添加到jsonObject中
jsonObject.put("id", this.user.getId());
jsonObject.put("password", this.user.getPassword());
jsonObject.put("phoneNumber", this.user.getPhoneNumber());
jsonObject.put("email", this.user.getEmail());
//将Student对象的部分内容添加到jsonObject中
jsonObject.put("studentSex", this.student.getSex());
jsonObject.put("studentProfession", this.student.getProfession());
//将列表添加到jsonObject中
List<User> list = new ArrayList<User>();
list.add(this.user);
jsonObject.put("item", list);
//添加数字类型和字符串类型
jsonObject.put("code", -1);
jsonObject.put("message", "无效的参数");
return jsonObject;
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
由此可见,json-taglib相对于@ResponseBody注解的方式,至少有以下两种优势
1.使用json-taglib,在控制器中的代码更加简洁,易读
2.使用json-taglib更加灵活,如果以后需要更改json数据格式,只需要更改jsp页面即可,不需要改动控制器代码
接着是性能测试:
测试使用100个线程,循环50次
上面的是@ResponseBody方式的测试结果,下面的是json-taglib的测试结果,发现从效率上来看,json-taglib的方式不如@ResponseBody的方式.
网上没有相关的答案,个人猜想是因为注解的方式,返回的对象不经过视图解析器解析,而是直接放入response的消息体中,而json-taglib要通过jsp页面解析,所以效率上会低一些.
二.明天计划完成的事情
1.看需求文档和产品讲解story视屏,争取尽快理解需求
三.遇到的问题
暂无
四.收获
对json-taglib的初步使用
五.项目进度情况
暂无延期风险
评论