struts2,实现Ajax异步通信

用例需要依赖的jar:

  1. struts2-core.jar
  2. struts2-convention-plugin.jar,非必须
  3. 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 }

Struts2AjaxAction.java

 1 package test.action.ajax;
 2 import java.io.UnsupportedEncodingException;
 3 import java.util.HashMap;
 4 import java.util.Map;
 5 import org.apache.commons.lang3.StringUtils;
 6 import org.apache.struts2.convention.annotation.Action;
 7 import org.apache.struts2.convention.annotation.Namespace;
 8 import org.apache.struts2.convention.annotation.ParentPackage;
 9 import org.apache.struts2.convention.annotation.Result;
10 import test.util.BaseAction;
11 
12 @ParentPackage("ajax")
13 @Namespace("/test")
14 public class Struts2AjaxAction extends BaseAction
15 {
16     /**
17      * struts2-ajax 用例
18      */
19     private static final long serialVersionUID = -4227395311084215139L;
20     
21     @Action(value = "gotoStruts2JsonPlugin", results = { 
22     @Result(name = "success", location = "/WEB-INF/content/test/ajax/struts2JsonPlugin.jsp")})
23     public String gotoStruts2JsonPlugin()
24     {
25         return SUCCESS;
26     }
27     
28     @Action(value = "gotoStruts2Ajax_post", results = { 
29     @Result(name = "success", location = "/WEB-INF/content/test/ajax/struts2Ajax_post.jsp")})
30     public String struts2Ajax_post()
31     {
32         return SUCCESS;
33     }
34 
35     @Action(value = "gotoStruts2Ajax_ajax", results = { 
36     @Result(name = "success", location = "/WEB-INF/content/test/ajax/struts2Ajax_ajax.jsp")})
37     public String struts2Ajax_ajax()
38     {
39         return SUCCESS;
40     }
41     
42     @Action(value = "post")
43     public String post()
44     {
45         String f1 = StringUtils.defaultString(getRequest().getParameter("field1"));
46         String f2 = StringUtils.defaultString(getRequest().getParameter("field2"));
47         ajaxText(f1+",测试,"+f2);
48         return null;
49     }
50     
51     @Action(value = "ajax")
52     public String ajax() throws UnsupportedEncodingException
53     {
54         String f1 = StringUtils.defaultString(getRequest().getParameter("field1"));
55         String f2 = StringUtils.defaultString(getRequest().getParameter("field2"));
56 
57         Map<String, String> jsonMap = new HashMap<String, String>();
58         jsonMap.put(f1, f1);
59         jsonMap.put(f2, f2);
60         jsonMap.put("status", SUCCESS);
61         super.ajaxJson(jsonMap);
62         return null;
63     }
64 }
  • jsp

struts2Ajax_post.jsp

<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%
request.setAttribute("cxtpath",request.getContextPath());
%>
<!DOCTYPE html>
<html>
<head>
<meta name="author" content="" />
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<title>使用$.ajax提交Ajax请求</title>
<s:property value="cxtpath"/>
<script src="${cxtpath}/js/common/jquery-1.9.1.js" type="text/javascript"></script>
<script type="text/javascript">
function ajax()
{// 以form1表单封装的请求参数发送请求。var val1 = $("#form1_field1").val();var val2 = $("#form1_field2").val();$.ajax({url: '${cxtpath}/test/ajax.action', data: {"field1": val1,"field2": val2},dataType: "json",async: false,type: "POST",success: function(data) {console.log("data:"+JSON.stringify(data));if (data.status == "success") {console.log("succ");}else{data;console.log("fail");}}});
}
</script>
</head>
<body>
<div>使用$.ajax提交Ajax请求
<s:form id="form1" method="post">field1:<s:textfield name="field1" label="field1"/><br/>field2:<s:textfield name="field2" label="field2"/><br/>field3:<s:textfield name="field3" label="field3"/><br/><tr><td colspan="2"><input type="button" value="提交" onClick="ajax();"/></td></tr>
</s:form>
</div>
</body>
</html>

struts2Ajax_ajax.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>使用$.post提交Ajax请求</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 post()
16 {
17     // 以form1表单封装的请求参数发送请求。
18     $.post('${cxtpath}/test/post.action', $("#form1").serializeArray(),
19         // data代表服务器响应,此处只是把服务器响应显示出来
20         function(data) {
21             console.log("data:"+JSON.stringify(data));
22         }
23     )
24 }
25 </script>
26 </head>
27 <body>
28 <div>使用$.post提交Ajax请求
29 <s:form id="form1" method="post">
30     field1:<s:textfield name="field1" label="field1"/><br/>
31     field2:<s:textfield name="field2" label="field2"/><br/>
32     field3:<s:textfield name="field3" label="field3"/><br/>
33     <tr>
34         <td colspan="2">
35         <input type="button" value="提交" onClick="post();"/></td>
36     </tr>
37 </s:form>
38 </div>
39 </body>
40 </html>

 

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

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

 

转载于:https://www.cnblogs.com/xiluhua/p/4390046.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359013.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快速提示:消息驱动Bean中的异常处理

让我们快速回顾一下有关消息驱动Bean的特殊处理。 MDB的入口点是重写的onMessage方法。 它不提供引发检查异常的任何作用域&#xff0c;因此&#xff0c;如果要处理错误情形&#xff0c;则需要从代码中传播未检查异常&#xff08;java.lang.RuntimeException的子类&#xff09…

大学生助学贷款如何还利息(本金+利息都可以)

生源地助学贷款还利息的步骤: 1、首先需要将钱转入支付宝,金额稍微高于应还款项即可。然后登陆电脑版支付宝,一定是要电脑登陆(手机上无法操作),如图所示 2、然后在支付宝主页中,点击右上角的“应用中心”,然后点击“生活服务”如图所示。

(实用)将wordpad添加到Windows PowerShell中

PowerShell能够直接打开notepad&#xff0c;但是无法调用wordpad&#xff0c;因为后者的可执行文件并不在系统默认的环境变量$env:Path中&#xff0c;只要将wordpad所在的路径添加到$env:Path&#xff0c;就可以从CMD或PowerShell中直接启动wordpad。 在PowerSehll下输入&#…

mysql分组区某列最后一条_[MySQL]MySQL数据库如何按某列分组排序后查询每个分组的最后一条数据?...

比如当前有如下的消息表(messages)及示例数据&#xff1a;Id Name Other_Columns-------------------------1 A A_data_12 A A_data_23 A A_data_34 B B_data_15 B B_data_26 C C_data_1按照以下SQL语句查询&#xff1a;select * from messages group by name得到的查询结果为&…

谷歌浏览器下载的内容老是自动打开

原因是每次下载内容在浏览器左下角都有提示&#xff0c;一般都是选择打开所在文件夹&#xff0c;一次手残&#xff0c;点了总是打开此文件导致一下载文件就自动打开。 解决方法。 1.点击右上角的... 2.找到设置-高级设置-下载 3.关掉我标红的位置信息即可。现在看不到啦&…

JBoss Fuse 6.2发布–指导如何快速尝试

在上周的红帽峰会上&#xff0c;宣布发布了JBoss Fuse 6.2 。 我要祝贺保险丝团队发布此版本。 我知道他们今年以来一直非常努力地进行质量检查&#xff0c;并确保质量检查通过了企业产品所期望的高品质壁垒。 因此&#xff0c;带着我的Camel帽子&#xff0c;很高兴看到包含最…

插入文件找不到桌面了?

解决方法&#xff0c;在那个界面空白处&#xff0c;右键显示所有文件即可。

mysql自增长主键_MySQL数据库8(九)列属性之主键、自增长

主键顾名思义&#xff0c;主要的键&#xff0c;primary key&#xff0c;在一张表中&#xff0c;有且只有一个字段&#xff0c;里面的值具有唯一性创建主键随表创建系统提供了两种增加主键的方式&#xff1a;1、直接在需要当做主键的字段之后&#xff0c;增加primary key属性来确…

微信小程序速成页面

你是否还在辛辛苦苦地码代码&#xff0c;特别是前端页面的编写&#xff0c;很多都是非常简单的&#xff0c;但界面多了还是要花费大量的时间&#xff0c;缩短了你陪男/女朋友的时间&#xff0c;家人的时间&#xff0c;休闲的时光。 微信小程序前端开发者工具将大大地为您节省开…

Ajax 生成流文件下载 以及复选框的实现

JQuery的ajax函数的返回类型只有xml、text、json、html等类型&#xff0c;没有“流”类型&#xff0c;所以我们要实现ajax下载&#xff0c;不能够使用相应的ajax函数进行文件下载。但可以用js生成一个form&#xff0c;用这个form提交参数&#xff0c;并返回“流”类型的数据。在…

mysql1130_解决远程连接mysql错误1130的方法

解决远程连接mysql错误1130代码的方法今天在用远程连接Mysql服务器的数据库&#xff0c;不管怎么弄都是连接不到&#xff0c;错误代码是1130&#xff0c;ERROR 1130: Host 192.168.2.159 is not allowed to connect to this MySQL server猜想是无法给远程连接的用户权限问题。结…

使用Classycle验证类/包依赖关系

Classycle是一个非常好的类和包依赖项的分析器和依赖项检查器。 它使您可以定义程序包组&#xff08;组件&#xff0c;层&#xff09;&#xff0c;并表达不需要的依赖性&#xff0c;例如周期或特定程序包之间的依赖性。 例如&#xff0c;您可以指定不希望包周期&#xff0c;也…

初学者如何学编程呢

先简单做个测试,这样就能找出你比较适合哪种语言。 下面简单介绍一下不同的语言吧

CellSet 遍历

CellSet 结构&#xff1a; 查询MDX&#xff1a; SELECT NON EMPTY {{ {{ {{ {{ {{ AddCalculatedMembers([店铺.店铺ID].[店铺ID].Members)}} }} }} }} }} DIMENSION PROPERTIES MEMBER_TYPE , [店铺.店铺ID].[店铺ID].[国家], [店铺.店铺ID].[店铺ID].[区域], [店铺.…

查看mysql字段的编码_MySQL查看和修改字符编码的实现方法

MySQL查看和修改字符编码的实现方法遇到一个插入数据库的乱码&#xff0c;因为是&#xff1a;mac版本的&#xff0c;按网上说的就是不能改变&#xff0c;其编码方式&#xff0c;本人的机器&#xff1a;mysql-***.dmg默认安装后的编码是&#xff1a;如下图&#xff1a;有两个编码…

如何找到微信公众号的视频链接及视频?

我们经常在微信公众号中看到一些视频,那么有时候看到比较好的我们都希望能把这个视频下载下来,长久保存! 那么,如何找到视频的原链接并下载成为自己的视频呢?我给大家简单总结一下吧。 首先要明白微信公众号的视频来源只会出现在腾讯视频和微视两个平台。 ​以这个公众号…

对交换机VLAN及各种端口类型的理解

每学习一种技术时&#xff0c;我们往往需要去了解why&#xff0c;即这个技术是为解决什么问题而出现的。 VLAN全称为Virtual Local Area Network&#xff0c;即虚拟局域网&#xff0c;是逻辑上的一种划分。一般来说&#xff0c;如果交换机没有进行过配置&#xff0c;所有端口都…

mysql pdb文件怎么打开_如何利用.pdb文件去调试

问题需求&#xff1a;1.需要去调试一个exe&#xff0c;查看内部执行的过程&#xff0c;但是该exe的源代码是孤立的&#xff0c;利用make文件组织进行编译.每天会给出编译包。问题的分析&#xff1a;考虑1. 新建一个VS的工程&#xff0c;然后手动添加这些文件&#xff0c;然后编…

GetWeApp聊天室 代码(微信小程序)

说明: 实现聊天功能,特色: 使用webSocket实现即时通信 发送和显示表情 数据接口: 数据接口 目录结构&#

每个Java开发人员都必须避免的9个安全错误

Checkmarx CxSAST是功能强大的源代码分析&#xff08;SCA&#xff09;解决方案&#xff0c;旨在从根本上识别&#xff0c;跟踪和修复技术和逻辑安全缺陷&#xff1a;源代码。 在这里查看 &#xff01; 自从1995年中期引入Java以来​​&#xff0c;它已经走了很长一段路。 它的…