struts2+json(2)

http://www.cnblogs.com/wuyifu/archive/2013/05/11/3073047.html

使用Servlet返回JSON数据到客户端:

15
publicclassJSON extendsHttpServlet {
20
privatestaticfinallongserialVersionUID = 1L;
32
publicvoiddoGet(HttpServletRequest request, HttpServletResponse response)
33
throwsServletException, IOException {
34
35
response.setContentType("text/html");
36
PrintWriter out = response.getWriter();
37
//将要被返回到客户端的对象
38
User user=newUser();
39
user.setId("123");
40
user.setName("JSONServlet");
41
user.setPassword("JSON");
42
user.setSay("Hello , i am a servlet !");
43
JSONObject json=newJSONObject();
44
json.accumulate("success", true);
45
json.accumulate("user", user);
46
out.println(json.toString());
47
//      因为JSON数据在传递过程中是以普通字符串形式传递的,所以我们也可以手动拼接符合JSON语法规范的字符串输出到客户端
48
//      以下这两句的作用与38-46行代码的作用是一样的,将向客户端返回一个User对象,和一个success字段
49
//      String jsonString="{\"user\":{\"id\":\"123\",\"name\":\"JSONServlet\",\"say\":\"Hello , i am a servlet !\",\"password\":\"JSON\"},\"success\":true}";
50
//      out.println(jsonString);
51
out.flush();
52
out.close();
53
}
65
publicvoiddoPost(HttpServletRequest request, HttpServletResponse response)
66
throwsServletException, IOException {
67
doGet(request, response);
68
}
69
70
}



结果在意料之中,如下图所示:


a1.jpg



使用JSP(或html等)返回JSON数据到服务器端:

1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2 {"user":{"id":"123","name":"JSONJSP","say":"Hello , i am a JSP !","password":"JSON"},"success":true}


这个就不用去看结果了吧。


再回到Struts,在Struts的MVC模型中,Action替代Servlet担当了Model的角色,所以对于Struts而言,返回 JSON数据到客户端,跟传统的WEB应用一样,存在两种方式,即在Action中输出JSON数据,和在视图资源中输出JSON数据。再往下细分的话,在Action中输出JSON数据又分为两种方式,一是使用传统方式输出自己包装后的JSON数据,二是使用Struts自带的JSON数据封装功能来自动包装并返回JSON数据。


在视图资源中输出JSON数据


Action处理完用户请求后,将数据存放在某一位置,如request中,并返回视图,然后Struts将跳转至该视图资源,在该视图中,我们需要做的是将数据从存放位置中取出,然后将其转换为JSON字符串,输出在视图中。这跟传统WEB应用中在JSP页面输出JSON数据的做法如出一辙:

01
publicString testByJSP() {
02
User user = newUser();
03
user.setId("123");
04
user.setName("Struts2");
05
user.setPassword("123");
06
user.setSay("Hello world !");
07
JSONObject jsonObject=newJSONObject();
08
jsonObject.accumulate("user", user);
09
//这里在request对象中放了一个data,所以struts的result配置中不能有type="redirect"
10
ServletActionContext.getRequest().setAttribute("data", jsonObject.toString());
11
returnSUCCESS;
12
};


因为是常规的Struts流程配置,所以配置内容就不再展示了。


JSP代码就非常简单了,

1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2 ${data }

结果如图所示:


a2.jpg


在Action中以传统方式输出JSON数据


这一点跟传统的Servlet的处理方式基本上一模一样,代码如下

01 publicvoiddoAction() throwsIOException{
02 HttpServletResponse response=ServletActionContext.getResponse();
03 //以下代码从JSON.java中拷过来的
04 response.setContentType("text/html");
05 PrintWriter out;
06 out = response.getWriter();
07 //将要被返回到客户端的对象
08 User user=newUser();
09 user.setId("123");
10 user.setName("JSONActionGeneral");
11 user.setPassword("JSON");
12 user.setSay("Hello , i am a action to print a json!");
13 JSONObject json=newJSONObject();
14 json.accumulate("success", true);
15 json.accumulate("user", user);
16 out.println(json.toString());
17 //      因为JSON数据在传递过程中是以普通字符串形式传递的,所以我们也可以手动拼接符合JSON语法规范的字符串输出到客户端
18 //      以下这两句的作用与38-46行代码的作用是一样的,将向客户端返回一个User对象,和一个success字段
19 //      String jsonString="{\"user\":{\"id\":\"123\",\"name\":\"JSONActionGeneral\",\"say\":\"Hello , i am a action to print a json!\",\"password\":\"JSON\"},\"success\":true}";
20 //      out.println(jsonString);
21 out.flush();
22 out.close();
23 }

struts.xml中的配置:

1 <packagename="default"extends="struts-default"namespace="/">
2 <actionname="testJSONFromActionByGeneral"class="cn.ysh.studio.struts2.json.demo.action.UserAction"method="doAction">
3 </action>
4 </package>
01
publicvoiddoAction() throwsIOException{
02
HttpServletResponse response=ServletActionContext.getResponse();
03
//以下代码从JSON.java中拷过来的
04
response.setContentType("text/html");
05
PrintWriter out;
06
out = response.getWriter();
07
//将要被返回到客户端的对象
08
User user=newUser();
09
user.setId("123");
10
user.setName("JSONActionGeneral");
11
user.setPassword("JSON");
12
user.setSay("Hello , i am a action to print a json!");
13
JSONObject json=newJSONObject();
14
json.accumulate("success", true);
15
json.accumulate("user", user);
16
out.println(json.toString());
17
//      因为JSON数据在传递过程中是以普通字符串形式传递的,所以我们也可以手动拼接符合JSON语法规范的字符串输出到客户端
18
//      以下这两句的作用与38-46行代码的作用是一样的,将向客户端返回一个User对象,和一个success字段
19
//      String jsonString="{\"user\":{\"id\":\"123\",\"name\":\"JSONActionGeneral\",\"say\":\"Hello , i am a action to print a json!\",\"password\":\"JSON\"},\"success\":true}";
20
//      out.println(jsonString);
21
out.flush();
22
out.close();
23
}
struts.xml中的配置:
1
<packagename="default"extends="struts-default"namespace="/">
2
<actionname="testJSONFromActionByGeneral"class="cn.ysh.studio.struts2.json.demo.action.UserAction"method="doAction">
3
</action>
4
</package>

注意:这个action没有result,且doAction方法没有返回值!



你可能感兴趣的:(json)