struts2-json-plugin插件实现异步通信

用例需要依赖的jar:

  1. struts2-core.jar
  2. struts2-convention-plugin.jar,非必须,
  3. struts2-json-plugin.jar
  4. org.codehaus.jackson.jar,提供json支持

用例代码如下:

  • 数据库DDL语句

 无

  • struts.xml
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
 3 <struts>
 4     <package name="basePackage" extends="json-default">
 5         <!-- 未到找Action指向页面 -->
 6         <default-action-ref name="404" />
 7 
 8         <global-exception-mappings>
 9             <exception-mapping result="exception" exception="java.lang.Exception"></exception-mapping>
10         </global-exception-mappings>
11 
12         <action name="404">
13             <result type="dispatcher">/WEB-INF/jsp/error/error_page_404.jsp</result>
14         </action>
15     </package>
16     
17     <!-- 入口地址:http://localhost:8888/struts2-test/test/gotoStruts2JsonPlugin.action -->
18     <package name="ajax" namespace="/test" extends="basePackage">
19         <action name="struts2JsonPlugin" method="struts2JsonPlugin"
20             class="test.action.ajax.Struts2JsonPluginAction">
21             <result type="json">
22                 <!-- 指定浏览器不缓存服务器响应 -->
23                 <param name="noCache">true</param>
24                 <!-- 指定不包括Action中值为null的属性 -->
25                 <param name="excludeNullProperties">true</param>
26             </result>
27         </action>    
28     </package>
29 </struts>
  • java类

action类

BaseAction.java

  1 package test.util;
  2 import java.io.IOException;
  3 import java.io.StringWriter;
  4 import java.io.Writer;
  5 import java.util.HashMap;
  6 import java.util.Map;
  7 import javax.servlet.ServletContext;
  8 import javax.servlet.http.HttpServletRequest;
  9 import javax.servlet.http.HttpServletResponse;
 10 import org.apache.log4j.Logger;
 11 import org.apache.struts2.ServletActionContext;
 12 import org.codehaus.jackson.JsonGenerator;
 13 import org.codehaus.jackson.JsonProcessingException;
 14 import org.codehaus.jackson.map.ObjectMapper;
 15 import com.opensymphony.xwork2.ActionSupport;
 16 
 17 public class BaseAction extends ActionSupport {
 18 
 19     private static final long serialVersionUID = 4271951142973483943L;
 20 
 21     protected Logger logger = Logger.getLogger(getClass());
 22 
 23     // 获取Attribute
 24     public Object getAttribute(String name) {
 25         return ServletActionContext.getRequest().getAttribute(name);
 26     }
 27 
 28     // 设置Attribute
 29     public void setAttribute(String name, Object value) {
 30         ServletActionContext.getRequest().setAttribute(name, value);
 31     }
 32 
 33     // 获取Parameter
 34     public String getParameter(String name) {
 35         return getRequest().getParameter(name);
 36     }
 37 
 38     // 获取Parameter数组
 39     public String[] getParameterValues(String name) {
 40         return getRequest().getParameterValues(name);
 41     }
 42 
 43     // 获取Request
 44     public HttpServletRequest getRequest() {
 45         return ServletActionContext.getRequest();
 46     }
 47 
 48     // 获取Response
 49     public HttpServletResponse getResponse() {
 50         return ServletActionContext.getResponse();
 51     }
 52 
 53     // 获取Application
 54     public ServletContext getApplication() {
 55         return ServletActionContext.getServletContext();
 56     }
 57 
 58     // AJAX输出,返回null
 59     public String ajax(String content, String type) {
 60         try {
 61             HttpServletResponse response = ServletActionContext.getResponse();
 62             response.setContentType(type + ";charset=UTF-8");
 63             response.setHeader("Pragma", "No-cache");
 64             response.setHeader("Cache-Control", "no-cache");
 65             response.setDateHeader("Expires", 0);
 66             response.getWriter().write(content);
 67             response.getWriter().flush();
 68         } catch (IOException e) {
 69             e.printStackTrace();
 70         }
 71         return null;
 72     }
 73 
 74     // AJAX输出文本,返回null
 75     public String ajaxText(String text) {
 76         return ajax(text, "text/plain");
 77     }
 78 
 79     // AJAX输出HTML,返回null
 80     public String ajaxHtml(String html) {
 81         return ajax(html, "text/html");
 82     }
 83 
 84     // AJAX输出XML,返回null
 85     public String ajaxXml(String xml) {
 86         return ajax(xml, "text/xml");
 87     }
 88 
 89     // 根据字符串输出JSON,返回null
 90     public String ajaxJson(String jsonString) {
 91         return ajax(jsonString, "application/json");
 92     }
 93     
 94     // 根据Map输出JSON,返回null
 95     public String ajaxJson(Map<String, String> jsonMap) {
 96         return ajax(mapToJson(jsonMap), "application/json");
 97     }
 98     
 99     // 输出JSON成功消息,返回null
100     public String ajaxJsonSuccessMessage(String message) {
101         Map<String, String> jsonMap = new HashMap<String, String>();
102         jsonMap.put("status", SUCCESS);
103         jsonMap.put("message", message);
104         return ajax(mapToJson(jsonMap), "application/json");
105     }
106     
107     // 输出JSON错误消息,返回null
108     public String ajaxJsonErrorMessage(String message) {
109         Map<String, String> jsonMap = new HashMap<String, String>();
110         jsonMap.put("status", ERROR);
111         jsonMap.put("message", message);
112         return ajax(mapToJson(jsonMap), "application/json");
113     }
114     // map转化为json数据
115     public String mapToJson(Map<String,String> map){
116         ObjectMapper mapper = new ObjectMapper();
117         Writer sw = new StringWriter();
118         try {
119             JsonGenerator json = mapper.getJsonFactory().createJsonGenerator(sw);
120             json.writeObject(map);
121             sw.close();
122         } catch (JsonProcessingException e) {
123             e.printStackTrace();
124         } catch (IOException e) {
125             e.printStackTrace();
126         }
127         return sw.toString();
128     }
129 }

Struts2JsonPluginAction.java

 1 package test.action.ajax;
 2 import java.util.HashMap;
 3 import java.util.Map;
 4 import org.apache.struts2.json.annotations.JSON;
 5 import test.util.BaseAction;
 6 import com.opensymphony.xwork2.Action;
 7 
 8 public class Struts2JsonPluginAction extends BaseAction
 9 {
10     /**
11      * struts2-json-plugin 用例
12      */
13     private static final long serialVersionUID = -4227395311084215139L;
14     // 模拟处理结果的属性
15     private int[] ints = {10, 20};
16     private Map<String, String> map = new HashMap<String, String>();
17     private String customName = "张三";
18     // 封装请求参数的三个属性
19     private String field1;
20     private String field2;
21     
22     // 没有setter和getter方法的字段不会被序列化
23     @SuppressWarnings("unused")
24     private String field3;
25     
26     // 执行
27     public String struts2JsonPlugin()
28     {
29         map.put("name", "test");
30         String test = getRequest().getParameter("field1");
31         System.out.println("name:"+test);
32         return Action.SUCCESS;
33     }
34     
35     // 使用注释语法来改变该属性序列化后的属性名
36     @JSON(name="newName")
37     public Map<String, String> getMap()
38     {
39         return this.map;
40     }
41     public int[] getInts()
42     {
43         return this.ints;
44     }
45     public void setCustomName(String customName)
46     {
47         this.customName = customName;
48     }
49     public String getCustomName()
50     {
51         return this.customName;
52     }
53     public void setField1(String field1)
54     {
55         this.field1 = field1;
56     }
57     public String getField1()
58     {
59         return this.field1;
60     }
61     public void setField2(String field2)
62     {
63         this.field2 = field2;
64     }
65     public String getField2()
66     {
67         return this.field2;
68     }
69 }
  • jsp
 1 <%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
 2 <%@ taglib prefix="s" uri="/struts-tags"%>
 3 <%
 4 request.setAttribute("cxtpath",request.getContextPath());
 5 %>
 6 <!DOCTYPE html>
 7 <html>
 8 <head>
 9 <meta name="author" content="" />
10 <meta http-equiv="Content-Type" content="text/html; charset=GBK" />
11 <title>使用Struts2JsonPlugin插件 </title>
12 <s:property value="cxtpath"/>
13 <script src="${cxtpath}/js/common/jquery-1.9.1.js" type="text/javascript"></script>
14 <script type="text/javascript">
15 function struts2JsonPlugin()
16 {
17     // 以form1表单封装的请求参数发送请求。
18     $.post('${cxtpath}/test/struts2JsonPlugin.action', $("#form1").serializeArray(),
19         // data代表服务器响应,此处只是把服务器响应显示出来
20         function(data) {
21             console.log("data:"+JSON.stringify(data));
22             for(var propName in data)
23             {
24                 var temp = data[propName];
25                 if(propName == "newName"){
26                     console.log("name:"+temp["name"])
27                 }else{
28                     console.log(propName + " = " + temp);
29                 }
30             }
31         }
32     );
33 }
34 </script>
35 </head>
36 <body>
37 <div>使用Struts2JsonPlugin插件
38 <s:form id="form1" method="post">
39     field1:<s:textfield name="field1" label="field1"/><br/>
40     field2:<s:textfield name="field2" label="field2"/><br/>
41     field3:<s:textfield name="field3" label="field3"/><br/>
42     <tr>
43         <td colspan="2">
44         <input type="button" value="提交" onClick="struts2JsonPlugin();"/></td>
45     </tr>
46 </s:form>
47 </div>
48 </body>
49 </html>

 

环境:JDK1.6,MAVEN,tomcat,eclipse

源码地址:https://files.cnblogs.com/files/xiluhua/struts2-json-plugin.rar

 

posted @ 2015-04-03 14:34  xiluhua  阅读(894)  评论(0编辑  收藏  举报