zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    范内瓦·布什发表《诚如所思》,被信息界公认为是信息科学经典之作
    1968年12月9日,恩格尔巴特公开演示了世界上第一个鼠标盒子
    最后一台小型机下线 阿里巴巴如何“去IOE”
    阿里云确认向12306提供了技术协助,负责承接12306网站75%的余票查询流量
    Weka Experimenter(实验者界面) 简解
    数理统计中 极大似然 的含义简介(举例说明)
    Weka Knowledge Flow(知识流界面) 详解
    Weka Explorer(探索者界面) 详解(4)logistic回归和回归算法
    Weka Explorer(探索者界面) 详解(3)决策树算法,分类器评价标准说明
    Weka Explorer(探索者界面) 详解(2)
  • 原文地址:https://www.cnblogs.com/xiluhua/p/4389999.html
Copyright © 2011-2022 走看看