• 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方法

  • 相关阅读:
    我所知道的数据库8-DML语言
    我所知道的数据库7-DDL语言(续2)
    CSS3 3D transform变换
    深入理解Node.js的异步编程风格(转载)
    ECMAscript
    JavaScript高级部分概念用法
    前端工程师面试题汇总
    10个最常见的HTML5中的面试题及答案
    js事件流
    本地储存
  • 原文地址:https://www.cnblogs.com/chenkeyu/p/7911953.html
Copyright © 2020-2023  润新知