首先,struts2对json是有支持的,听到“有支持”,我们应该就有点小放心了。就比如你在服装店看中了一件很拉风,很体现你的气质的衣服,在去结账的时候,当看到收银台有“银联”标记,表示对刷卡消费“支持”,你就只需要用卡一刷,提衣服走人。否则的话可能现金还不够,需要去取款机去取现金,再回来结账。多麻烦是吧。
无刷新技术不妨简化为从客户端到服务器端和从服务器端到客户端。
使用jquery的$.post(url,{json格式的传输数据},function(data){对返回结果进行处理});
struts2使用Action代替了servlet,所以先架起struts2+json的框架及包支持:
以及web.xml文件中增加对struts2的支持:
再简单的写一个struts.xml配置文件:
从客户端到服务器端:
记得最开始学ajax的时候,使用json格式传回数据时,采用的依然是
- var result = XmlHttpRequest.responseText;
可以看出,json格式传回来是用文本Text的方式传回的,只是需要用eval()方法执行,把文本转换成json对象,所以,笔者认为json传输的实质还是一个符合json语法规则的字符串,而jquery的ajax对返回的字符串进行了封装转换,不再需要我们自己手动eval()去转换成json对象了。
客户端代码:
- $.post('json.action',{'username':'张三'},function(data){
- //data是返回来的数据,是一个json对象
- //可以通过alert(typeof data);查看其类型,是object
- alert(data.username+" , "+data.password);
- });
jquery还提供了$.get(url,{要传过去的json格式的参数},callback)这种get提交方式,语法给你post提交是一样的,只是底层的提交方式不同。
从服务器端到客户端:
前面讲到了struts2对json的支持,体现在哪方面呢?
首先,看看Action中是怎么写的:
- private String username;
- private String password;
- public String execute(){
- System.out.println("username====="+username);
- System.out.println("password====="+password);
- username="李四";
- password="11111";
- return "success";
- }
- public void setUsername(String username){
- this.username = username;
- }
- @JSON(serialize=true)
- public String getUsername() {
- return username;
- }
- public String getPassword() {
- return password;
- }
一个username和password属性以及其set和get方法。然后一个返回值为String的执行方法。
其中set是服务器端用来接收从客户端传过来的属性的方法,get方法是客户端用来接收服务器端的属性的方法。其底层是用序列化来实现的。
序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。
所以,一般的都加上属性的set和get方法。
有get方法的属性会被序列化,即可以通过json传输。控制属性序列化有有两种方式:
1、使用注解方式
JSON的注解是@JSON,共有4个属性分别是:
① name String 类型 用户为属性起一个别名(我们序列化到JSON对象中的键默认是属性名称,如果使用了name属性那么键是name起的名字)
② serialize Boolean类型 默认为true 也就是可以被序列化,如果设为false那么该属性将不包含在JSON对象中
③ format String类型 主要是对日期进行格式化
④ deserialize Boolean类型 默认为true,它是指反序列化,和serialize相反。
所以,如果想某个属性不被序列化,则在其get方法上加上“@JSON(serialize=false)”即可
2、使用struts.xml配置文件方式
这个不赘述了,引用一个博客 隔叶黄莺 ,讲的比较详细。
转载于:https://blog.51cto.com/liangxueming/1092821