发表于: 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的初步使用

五.项目进度情况

暂无延期风险


返回列表 返回列表
评论

    分享到