笔者构建项目是通过Maven来创建的,项目所需的依赖如下:
pom.xml:
复制代码
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
复制代码
首我们把思路理一下,试想client对xxx.action发送一个请求,需要将一个java对象传输到client,struts2根据struts.xml的配置帮我们截获到这个请求,执行execute()方法,一般情况我们是返回一个页面,但是要做到AJAX就不能进行页面的跳转,所以就通过I/O来输出。struts.xml:
复制代码
< xml version="1.0" encoding="UTF-8" >
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
text/html
inputStream
复制代码
指定result的类型为stream,并配置stream的相关参数,需要说明的是inputStream,inputStream是action中的成员变量,我们输出的json数据,就是到这个对象中。
UserAction.java:
复制代码
package com.hzc.action;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import net.sf.json.JSONObject;
import com.hzc.model.User;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
private String jsonStr;
private User user;
private InputStream inputStream;
public String getJsonStr() {
return jsonStr;
}
public void setJsonStr(String jsonStr) {
this.jsonStr = jsonStr;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public InputStream getInputStream() {
return inputStream;
}
public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
}
@Override
public String execute() throws Exception {
//System.out.println(user.getId());
JSONObject myjJsonObject = new JSONObject().fromObject(jsonStr);
System.out.println( JSONObject.toBean(myjJsonObject, User.class));
User user = new User();
user.setName("hzc");
user.setAge(22);
JSONObject jsonObject = new JSONObject().fromObject(user);
inputStream = new ByteArrayInputStream(jsonObject.toString().getBytes("UTF-8"));
return SUCCESS;
}
}
复制代码
对于jsonStr这个变量先不要管它,后面再说!
user这个对象先把转换为json字符串(),JSONObject jsonObject = new JSONObject().fromObject(user); 在调用toString()方法就可以往我们创建好的inputStream写json字符串了,当然最后别忘了return SUCCESS;