下面是整个Action的完整代码:017018publicclassUserAction extendsActionSupport {023privatestaticfinallongserialVersionUID = 1L;025//将会被Struts2序列化为JSON字符串的对象026privateMap dataMap;031publicUserAction() {032//初始化Map对象033dataMap = newHashMap ();034}035036/**037* 测试通过action以视图方式返回JSON数据038* @return039*/040publicString testByJSP() {041User user = newUser();042user.setId("123");043user.setName("JSONActionJSP");044user.setPassword("123");045user.setSay("Hello world !");046JSONObject jsonObject=newJSONObject();047jsonObject.accumulate("user", user);048jsonObject.accumulate("success", true);049//这里在request对象中放了一个data,所以struts的result配置中不能有type="redirect"050ServletActionContext.getRequest().setAttribute("data", jsonObject.toString());051returnSUCCESS;052};053054/**055* 测试通过action以Struts2默认方式返回JSON数据056* @return057*/058publicString testByAction() {059// dataMap中的数据将会被Struts2转换成JSON字符串,所以这里要先清空其中的数据060dataMap.clear();061User user = newUser();062user.setId("123");063user.setName("JSONActionStruts2");064user.setPassword("123");065user.setSay("Hello world !");066dataMap.put("user", user);067// 放入一个是否操作成功的标识068dataMap.put("success", true);069// 返回结果070returnSUCCESS;071}072073/**074* 通过action是以传统方式返回JSON数据075* @throws IOException076*/077publicvoiddoAction() throwsIOException{078HttpServletResponse response=ServletActionContext.getResponse();079//以下代码从JSON.java中拷过来的080response.setContentType("text/html");081PrintWriter out;082out = response.getWriter();083//将要被返回到客户端的对象084User user=newUser();085user.setId("123");086user.setName("JSONActionGeneral");087user.setPassword("JSON");088user.setSay("Hello , i am a action to print a json!");089JSONObject json=newJSONObject();090json.accumulate("success", true);091json.accumulate("user", user);092out.println(json.toString());093// 因为JSON数据在传递过程中是以普通字符串形式传递的,所以我们也可以手动拼接符合JSON语法规范的字符串输出到客户端094// 以下这两句的作用与38-46行代码的作用是一样的,将向客户端返回一个User对象,和一个success字段095// String jsonString="{\"user\":{\"id\":\"123\",\"name\":\"JSONActionGeneral\",\"say\":\"Hello , i am a action to print a json!\",\"password\":\"JSON\"},\"success\":true}";096// out.println(jsonString);097out.flush();098out.close();099}100101/**102* Struts2序列化指定属性时,必须有该属性的getter方法,实际上,如果没有属性,而只有getter方法也是可以的103* @return104*/105publicMap getDataMap() {106returndataMap;107}108109}完整的struts.xml配置文件如下:查看源码打印01 02 04 05 06 08 09 10 11 dataMap 12 13 16 17 22 23 28 29 30 31 32 34 35 37 /actionJSP.jsp 38 39 40