struts2对于处理JSON的配置
由于最近几年日益流行前后端分离模式,JSON作为数据载体也变得不可或缺。几乎所有的web框架都需要支持JSON,下面咱就一起了解下struts2是如何支持JSON的。
对于JSON的发送
这里有两种方法实现,一种就是最原始的,先使用工具将对象转换成json字符串,再把数据放入response中返回。
struts通过response返回json
工具的我使用的是阿里的fastjson
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.29</version>
</dependency>
Action的代码:
@Action(value = "info")
//方法使用void
public void info() throws IOException {
//设置响应类型
ServletActionContext.getResponse().setContentType("text/html;charset=utf-8");
//通过response返回数据
PrintWriter out=ServletActionContext.getResponse().getWriter();
//数据载体,一个map
Map<String,Object> data=new HashMap<>();
model.put("success",true);
model.put("data","数据");
//使用fastJSON对对象进行转换
String json=JSON.toJSONString(model);
out.println(json);
out.flush();
out.close();
}
可以发现,如果使用最原始的方法来实现的话,代码非常的臃肿。下面介绍struts2原生的方式:
struts2通过struts2-json-plugin来实现对json的支持
maven依赖
<!--struts json支持-->
<dependency> <groupId>org.apache.struts</groupId>
<artifactId>struts2-json-plugin</artifactId>
<version>2.3.4</version>
</dependency>
<!-- struts核心包--> <dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.3.4</version>
<exclusions>
<exclusion>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--struts 集成spring --> <dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.3.4</version>
</dependency>
<!-- struts零配置依赖 --> <dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-convention-plugin</artifactId>
<version>2.3.4</version>
</dependency>
这里需要注意的是struts的版本号,如果可以尽量和我的一样,否者可能会出现各种错误(血淋淋的经验)
struts的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="base" extends="json-default,struts-default">
<!-- 这里可以设置一些全局的返回值映射关系等 -->
</package>
<!-- 将Action交给spring容器管理 -->
<constant name="struts.objectFactory" value="spring" /> <!-- 零配置 -->
<constant name="struts.convention.package.locators" value="action" />
<constant name="struts.convention.package.locators.basePackage" value="com.cky.blog.action" />
<!--默认所有的结果页面都存储的路径-->
<constant name="struts.convention.result.path" value="/WEB-INF/content" />
<!--设置静态资源过滤,以static开头的不处理-->
<constant name="struts.action.excludePattern" value="/static/.*?" /> <!-- 模式为开发模式,修改xml配置文件会自动加载,项目交付的时候设置为false,以免影响性能 -->
<constant name="struts.devMode" value="true" />
<constant name="struts.configuration.xml.reload" value="true" />
<!-- 字符集编码 -->
<constant name="struts.i18n.encoding" value="utf-8" />
<package name="defaultPackage" namespace="/" extends="struts-default"> </package>
</struts>
Action的编写
@Controller
@Scope("prototype")
@ParentPackage("base")
@Namespace("/category")
public class CategoryIndex extends ActionSupport{
//@result中的value代表视图名,
// type需要指定为json,
// params中的"root"不可以改变,
// "data"可以改变,指定要转换成json的对象
@Action(value = "update",results = {
@Result(name = "json",type = "json",params = {"root","data"})})
public String update() throws IOException {
//实例化data
data=new HashMap<String,Object>();
data.put("success",true);
data.put("message","提交成功");
return "json";
}
//通过data这个map集合来传递数据
private Map<String,Object> data;
public Map getData(){return data;}
public void setData(Map data){this.data=data}
}
对于JSON的解析
struts2默认就支持对json的解析,是不是很开心?也就是说他可以像解析普通的post提交一样,解析json数据,然后自动将根据键名将数据注入Action的属性中,当然,前提是属性存在并有getter、setter方法
struts2对于处理JSON的配置的更多相关文章
- struts2中的json
这里放一个转载的struts2中json的详细应用和范例, http://yshjava.iteye.com/blog/1333104,这是个人在网上看到的很用心也很详细的一份关于struts2中js ...
- Struts2之—集成Json插件实现Ajax
上篇博客介绍了Struts2中自己定义结果集实现Ajax,也分析了它的缺点:这样自己定义的结果集,写死了,不能做到client须要什么数据就传什么数据:Struts2之-自己定义结果集实现aja ...
- Struts2基于注解的Action配置
使用注解来配置Action的最大好处就是可以实现零配置,但是事务都是有利有弊的,使用方便,维护起来就没那么方便了. 要使用注解方式,我们必须添加一个额外包:struts2-convention-plu ...
- struts2在web.xml中配置详情
web.xml是web应用中载入有关servlet信息的重要配置文件,起着初始化servlet,filter等web程序的作用. 通常,全部的MVC框架都须要Web应用载入一个核心控制器.那採取什么方 ...
- 让EFCore更疯狂些的扩展类库(一):通过json文件配置sql语句
前言 EF通过linq和各种扩展方法,再加上实体模型,编写数据库的访问代码确实是优美.舒服,但是生成的sql不尽如意.性能低下,尤其是复杂些的逻辑关系,最终大家还是会回归自然,选择能够友好执行sql语 ...
- .NetCore获取json文件配置内容
.netcore中的数据配置及内容用了json文件代替了之前framework的xml文件,那么json中的数据该怎么获取呢?下面讲解json文件在.net core中的获取方法. 首先,新建一个.n ...
- 【ASP.NET Core快速入门】(五)命令行配置、Json文件配置、Bind读取配置到C#实例、在Core Mvc中使用Options
命令行配置 我们通过vs2017创建一个控制台项目CommandLineSample 可以看到现在项目以来的是dotnet core framework 我们需要吧asp.net core引用进来,我 ...
- package.json的配置理解
一.初步理解 1. npm安装package.json时 直接转到当前项目目录下用命令npm install 或npm install --save-dev安装即可,自动将package.json中 ...
- 菜鸟入门【ASP.NET Core】5:命令行配置、Json文件配置、Bind读取配置到C#实例、在Core Mvc中使用Options
命令行配置 我们通过vs2017创建一个控制台项目CommandLineSample 可以看到现在项目以来的是dotnet core framework 我们需要吧asp.net core引用进来 ...
随机推荐
- 即时通信系统Openfire分析之七:集群配置
前言 写这章之前,我犹豫了一会.在这个时候提集群,从章节安排上来讲,是否合适?但想到上一章<路由表>的相关内容,应该不至于太突兀.既然这样,那就撸起袖子干吧. Openfire的单机并发量 ...
- STM32外部中断线编程
#include "ExtiConfig.h" unsigned char key1Down = 0; unsigned char key2Down = 0; /********* ...
- 虚拟机VMware Workstation Pro下安装ubuntu-14.04.4(64位)方法(附ubuntu-14.04-desktop-amd64.iso下载链接)
ubuntu-14.04-desktop-amd64.iso下载: 链接:http://pan.baidu.com/s/1bFi0d4 密码:yx0l 零基础linux使用入门教学视频分享: 链接:h ...
- Tirp(状压DP)
Description 有一个N*N的迷宫,其中有一些宝藏,现在,小A要从入口(1,1)出发,到达出口(N,N),每次,小A只能从当前的格子走到上下左右四个格子,为了不空手而归,小A决定要拿到所以的宝 ...
- Loadrunner Http接口Get/Post方法性能测试脚本解析
最近使用LoadRunner 11进行了一次完整的Http WEB接口性能测试,下面介绍下Http接口Get/Post方法性能测试脚本通用编写方法. 1. Http接口性能测试基本流程 首先定义了一个 ...
- [Bayesian] “我是bayesian我怕谁”系列 - Exact Inferences
要整理这部分内容,一开始我是拒绝的.欣赏贝叶斯的人本就不多,这部分过后恐怕就要成为“从入门到放弃”系列. 但,这部分是基础,不管是Professor Daphne Koller,还是统计学习经典,都有 ...
- linux云服务器常用设置
前面的话 由于在云服务器上配置自己的网站,将Linux里的常用设置记录如下 更改shell 默认地, ubuntu系统默认的shell是dash,但更常用的shell是bash 通过下面命令可以将da ...
- JS框架设计读书笔记之-异步
setTimeout/setInterval 1. 如果回调执行时间大于间隔时间,真正的间隔时间会大一些. 2. 存在一个最小的时间间隔,即使seTimeout(fn,0),在IE6-IE8中大概为1 ...
- 阿里JAVA开发手册零度的思考理解(二)
转载请注明原创出处,谢谢! 说在前面 人生的大道上默默地走,就必须要有一盏灯亮着为你引导方向!而这盏灯抑或只是一句话,一句鼓励,一个赞美,一次承认,一次认可,一次相识一次交流-- 上篇文章:阿里JAV ...
- HDU 4135 Co-prime(容斥+数论)
Co-prime Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...