暑期项目经验(六)--struts+json

              struts+json

tips:注意 struts.xml配置,  json-default  及引入 struts2-json-plugin-2.1.8.1.jar 包

1、json基础知识

JSON(JavaScript Object Notation)是一种轻量级的数据格式,采用完全独立于语言的文本格式,是理想的数据交换格式。同时,JSON是Javascript原生格式,这意 味着在javascript中处理JSON数据不需要任何特殊的API或工具包,而且效率非常高。

JSON的结构如下:

  • “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
  • 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)

一个标准的json格式:

{"name":"jifeng","company":"taobao"}

2.json的解析

json的解析方法共有两种:1. eval() ; 2.JSON.parse() ; 3.evalJSON()。具体使用方法如下:

var jsonstr = ‘{"name":"jifeng","company":"taobao"}‘;
//eval function
var evalJson = eval(‘(‘ + jsonstr + ‘)‘);
// JSON.parse function
var JSONParseJson = JSON.parse(jsonstr);

//这个引入property.js
var obj = jsonstr.evalJSON();

3.struts2的json响应的param类型   param name=" XX "

root:只包含xx对象excludeProperties  :除了xx之外的集合includeProperties : 包含xx的集合
wrapPrefix :json结果开头添加xx(比如<paramname="wrapPrefix">[</param>)
wrapSuffix :同上,只不过是结尾
ignoreHierarchy :转化时是否忽略继承关系true/false
enumAsBean : 是否将枚举当做一个bean处理
enableGZIP :是否支持gzip压缩输出
noCache :是否缓存
excludeNullProperties : 是否转化输出 null值
statusCode :设置响应代号比如 304
callbackParameter : JSONP跨域访问的回调设置
contentType : 输出类型

4.fastjson  实例

实体类:

package com.pxj.fastjson.entity;

public class Student {
     private int id;
        private String name;
        private int age;  

        /**
         * 默认的构造方法必须不能省,不然不能解析
         */  

        public Student(){  

        }
        public Student(int id,String name,int age) {
            this.id = id;
            this.name = name;
            this.age = age;
        }  

        public int getId() {
            return id;
        }  

        public void setId(int id) {
            this.id = id;
        }  

        public String getName() {
            return name;
        }  

        public void setName(String name) {
            this.name = name;
        }  

        public int getAge() {
            return age;
        }  

        public void setAge(int age) {
            this.age = age;
        }  

        @Override
        public String toString() {
            return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
        }
}
package com.pxj.fastjson.entity;

import java.util.List;

public class Teacher {
    private int id;
    private String name;  

    private List<Student> students;  

    /**
     * 默认的构造方法必须不能省,不然不能解析
     */
    public Teacher() {  

    }
    public Teacher(int id,String name) {
        this.id = id;
        this.name = name;
    }  

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }  

    public List<Student> getStudents() {
        return students;
    }
    public void setStudents(List<Student> students) {
        this.students = students;
    }
    @Override
    public String toString() {
        return "Teacher [id=" + id + ", name=" + name + ", mStudents="
                + students + "]";
    }
}

测试类:

package com.pxj.fastjson.demo;

import java.util.ArrayList;
import java.util.List;

import org.junit.Test;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.alibaba.fastjson.serializer.SimplePropertyPreFilter;
import com.pxj.fastjson.entity.Student;
import com.pxj.fastjson.entity.Teacher;

public class Demo {
    @Test
    public void test1() {
        Student student = new Student(0, "Aaron", 24);
        System.out.println(JSON.toJSONString(student));
    }
    //{"age":24,"id":0,"name":"Aaron"}

    @Test
    public void test2() {
        List<Student> students = new ArrayList<Student>();
        for (int i = 0; i < 5; i++) {
            Student stu = new Student(i, "Student" + i, 18 + i);
            students.add(stu);
        }
        System.out.println(JSON.toJSONString(students));
    }

    @Test
    public void test3() {
        List<Teacher> teaList = new ArrayList<Teacher>();
        for (int i = 0; i < 10; i++) {
            Teacher teacher = new Teacher(i, "Teacher " + i);
            List<Student> stus = new ArrayList<Student>();
            for (int j = 0; j < 4; j++) {
                Student s = new Student(j, "Student" + j, 18 + j);
                stus.add(s);
            }
            teacher.setStudents(stus);
            teaList.add(teacher);
        }
        String jsonTeach = JSON.toJSONString(teaList);
        System.out.println("fastjson = " + jsonTeach);
    }

    // 按照标准的json 格式输出
    @Test
    public void test4() {
        Student student = new Student(0, "Aaron", 24);
        System.out.println(JSON.toJSONString(student, true));
    }

    // 实体类中的某个字段或某几个不进行解析呢
    @Test
    public void test5() {
        List<Student> students = new ArrayList<Student>();
        for (int i = 0; i < 5; i++) {
            Student stu = new Student(i, "Student" + i, 18 + i);
            students.add(stu);
        }
        SimplePropertyPreFilter filter = new SimplePropertyPreFilter(Student.class, "id", "age");
        String jsonStu = JSON.toJSONString(students, filter);
        System.out.println(jsonStu);
    }
    //反序列化主要使用的是JSON.parseObject(str,class); 它就能把我们的str 转化为class 类型的对象,当然还有更复杂的对象
    @Test
    public void test6() {
        List<Student> students = new ArrayList<Student>();
        for (int i = 0; i < 5; i++) {
            Student stu = new Student(i, "Student" + i, 18 + i);
            students.add(stu);
        }
        String jsonStu = JSON.toJSONString(students);
        List<Student> stu =JSON.parseObject(jsonStu, new TypeReference<List<Student>>(){});
        for(int i=0;i<stu.size();i++)
        {
            System.out.println(stu.get(i));
        }
    }
}

5. struts+json实例

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <base href="<%=basePath%>">
        <title>获取</title>
        <script type="text/javascript" src="js/jquery-1.4.3.js">
</script>
        <script type="text/javascript">
function loadInfo() {
    $("#info").load("loadInfo");
}
</script>
    </head>
    <body>
        <input type="button" value="获取" id="btnGet" onclick="loadInfo()" />
        <div id="info"></div>
    </body>
</html>

comment.java

package com.pxj.entity;

public class Comment {
    private long id;
    private String nickname;
    private String content;
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public String getNickname() {
        return nickname;
    }
    public void setNickname(String nickname) {
        this.nickname = nickname;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
}

InfoAction.java

package com.pxj.action;

import java.util.ArrayList;
import java.util.List;

import org.apache.struts2.json.annotations.JSON;

import com.pxj.entity.Comment;

public class InfoAction {
    private static final long serialVersionUID = 1359090410097337654L;

    private List<Comment> comments = new ArrayList<Comment>();
    //没getter and setter方法的属性不会被串行化到JSON
    @SuppressWarnings("unused")
    private String title;
    //!!!使用transient修饰的属性也会被串行化到JSON
    private transient String content;

    public String loadInfo() {
        title="123木头人";
        content="你是木头人,哈哈。";
        loadComments();
        return "success";
    }

    /**
     * 加载留言信息
     */
    private void loadComments() {
        Comment com1 = new Comment();
        com1.setContent("很不错嘛");
        com1.setId(1);
        com1.setNickname("纳尼");
        Comment com2 = new Comment();
        com2.setContent("哟西哟西");
        com2.setId(2);
        com2.setNickname("小强");
        comments.add(com1);
        comments.add(com2);
    }
    //为了使content对象不被串行化到JSON,在不能舍弃其getter setter方法的时候,我们可以这样在content的getter方法上面加上注解:@JSON(serialize=false)
    @JSON(serialize=false)
    public List<Comment> getComments() {
        return comments;
    }

    public void setComments(List<Comment> comments) {
        this.comments = comments;
    }

    public static long getSerialversionuid() {
        return serialVersionUID;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}

struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
    <package name="default" namespace="/" extends="json-default">

        <action name="loadInfo" class="com.pxj.action.InfoAction" method="loadInfo">
            <result name="success" type="json"></result>
        </action>
</struts>
时间: 2024-10-25 09:30:08

暑期项目经验(六)--struts+json的相关文章

暑期项目经验(六)--struts+jasperreporters

struts + jasperreporters 1.jasperreporters+ireport,版本要对应,先用ireport制作相应模版,生成相应.jasper文件. 实例如下: 2.jar包: 3.实体类 package com.pxj.report.pojo; public class Address { private String city; private String zipcode; public String getCity() { return city; } publ

暑期项目经验(五)--struts+ajax

struts+ajax 一.ajax知识点 二.struts+ajax a.  index.jsp <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+

暑期项目经验(十)--struts + poi

struts + poi 一.poi知识讲解 可以下载 孔浩老师 的poi视频,其中封装的四个工具类,很好用,能方便应用到项目中. 二.poi实例 1.引入jar包 2. 引入四个工具类 1 package com.pl.util; 2 3 import java.lang.annotation.Retention; 4 import java.lang.annotation.RetentionPolicy; 5 6 @Retention(RetentionPolicy.RUNTIME) 7 p

暑期项目经验(十一)--网页中文乱码问题

网页中文乱码问题 做项目时,不可避免的会碰到中文显示为乱码为问号的情形.网上讲得方法很多,不尽相同.反正我的做法是: 1.修改tomcat中server.xml, 找到Connectotr,在里面加上URIEncoding="UTF-8" <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443

暑期项目经验(九) -- request session application

request.session.application 一.基础知识 可以看看  浅谈:request,session,application(http://blog.csdn.net/hzc543806053/article/details/7416007) 要点: 作用域: request<session<application 共同方法:都可以使用 setAttribute(String name , Object o ) ,getAttribute(String name) 二.在ja

《项目经验》--通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中

  先看一下我要实现的功能界面:   这个界面的功能在图中已有展现,课程分配(教师教授哪门课程)在之前的页面中已做好.这个页面主要实现的是授课,即给老师教授的课程分配学生.此页面实现功能的步骤已在页面中有所体现,这里不再赘述,此篇文章主要介绍:我是如何通过js从前台获取数据,然后通过ajax技术向后台一般处理程序传递JSON,后台又是如何获取传来的JSON,并对JSON数据转换,然后将转换后的数据写入数据库的! 介绍这些步骤实现前,先说说自己的辛酸:絮叨辛酸,是因为为了实现这个功能,我真的用了很

暑期报修项目经验分享二(附原码)

楔子 第二期项目经验分享,其实整个项目流程,我们只是参与了其中一小部分,仅仅是添加了材料管理模块的内容,在第一期的实践里面,主要维护材料类别的增查改操作.二期维护做的是材料出入库处理,因为我处理的是入库管理这一块,所以分享下做这一块的经验. 需求分析: 在分析业务需求的时候,因为考虑到出入库在一张数据表里面,即是共用数据,那么type区分出入库,在写代码的时候一个反人类的操作就是把流水号设置成整形,虽然影响不大,另外关于材料类别代码这里,因为材料类别是三级联动设置,所以我们只取最后一级的代码,因

IdentityServer4系列之中文文档及实际项目经验分享

0.前言 原文:http://docs.identityserver.io/en/release/声明: 1.目录一至五章节根据IdentityServer英文文档翻译而来,有些内容会根据自己的理解来表述的(包括标题),文档的内容会不断的更新. 2.第六章节会进行阐述在实际项目中所用的内容以及问题 一.介绍 IdentityServer4特性简介 深入讲解 术语解释 支持规范 包和构建说明 二.快速入门 设置和概述 使用客户端证书访问API(客户端模式) 使用密码访问API(密码模式) 使用Op

Atitit.attilax的&#160;case&#160;list&#160;项目经验&#160;案例列表

Atitit.attilax的 case list 项目经验 案例列表 1. Atian inputmethod 输入法3 2. Ati desktop engine桌面引擎3 3. Acc资金账户系统4 4. Attrib manager  属性管理器4 5. Auth sys权限系统4 6. Ad filter广告过滤系统 php 实现5 7. Big data Folder  base Store enginee大数据存储引擎(基于分布式文件夹)5 8. Disk Store engine