struts2和json交互

合集下载

struts2的execute() 方法

struts2的execute() 方法

struts2的execute() 方法(实用版4篇)《struts2的execute() 方法》篇1在Struts 2 中,execute() 方法是Action 的核心方法,它负责处理HTTP 请求并返回一个Action 的执行结果。

当Struts 2 接收到一个HTTP 请求时,它会查找并实例化指定的Action 类,然后调用其execute() 方法。

execute() 方法的参数包括:- HttpServletRequest 请求对象- HttpServletResponse 响应对象- ActionContext 动作上下文对象execute() 方法的返回值通常是Action 的一个结果类型,例如String、Map、List 等。

在Struts 2 中,结果类型可以通过在Action 类上添加注解来指定,例如:```java@Result(type = "json")public String handle() {//...}```如果execute() 方法返回一个结果类型为String 类型的字符串,那么Struts 2 将将其作为HTML 页面的内容返回给客户端。

如果返回一个Map 类型的结果,那么Struts 2 将将其作为JSON 数据返回给客户端。

如果返回一个List 类型的结果,那么Struts 2 将将其作为一个表格返回给客户端。

《struts2的execute() 方法》篇2在Struts 2 中,execute() 方法是Action 类的核心方法,它是Action 处理请求的关键步骤。

当请求进入Action 类后,首先会调用execute() 方法。

execute() 方法负责处理用户的请求,执行相应的业务逻辑,并将处理结果返回给客户端。

Struts 2 的execute() 方法的参数包括:1. HttpServletRequest request:当前请求的ServletRequest 对象。

Struts2返回JSON对象

Struts2返回JSON对象

1、引入包(本文中的包全部引自struts-2.1.8.1\lib):struts2-json-plugin-2.1.8.1.jarjson-lib-2.1.jarcommons-collections-3.2.jarcommons-beanutils-1.7.0.jarcommons-lang-2.3.jarcommons-logging-1.0.4.jarezmorph-1.0.3.jar这7个包是返回json形式的数据必须的。

因为json大量引用了Apache commons的包,所以要加入4个,commons包,除了commons的包外,还需要引入一个ezmorph的包。

最后加入struts2必须的6个包:struts2-core-2.1.8.1.jarxwork-core-2.1.6.jarognl-2.7.3.jarfreemarker-2.3.15.jarcommons-fileupload-1.2.1.jarcommons-io-1.3.2.jar2、后台:1) Userinfo实体类代码public class UserInfo implements Serializable {private int userId;private String userName;private String password;get set方法略}2) Action类public class TestAction extends ActionSupport {private String message; //使用json返回单个值 private UserInfo userInfo; //使用json返回对象 private List userInfosList; //使用josn返回List对象get set方法略/*返回单个值*/public String returnMsg(){this.message = "成功返回单个值";return SUCCESS;}/*返回UserInfo对象*/public String returnUser(){userInfo = new UserInfo();userInfo.setUserId(10000);userInfo.setUserName("刘栋");userInfo.setPassword("123456");return SUCCESS;}/*返回List对象*/public String returnList(){userInfosList = new ArrayList<UserInfo>();UserInfo u1 = new UserInfo();u1.setUserId(10000);u1.setUserName("张三");u1.setPassword("111111");UserInfo u2 = new UserInfo();u2.setUserId(10001);u2.setUserName("李四");u2.setPassword("222222");userInfosList.add(u1);userInfosList.add(u2);return SUCCESS;}}3) struts.xml(必须继承json-default、json-default继承自struts-default)<package name="default" namespace="/json" extends="json-default"><action name="returnMsg" class="com.testAction " method="returnMsg"> <result name="success" type="json"><param name="root">validate</param></result></action><action name="returnUser "class="com.testAction " method="returnUser "><result name="success" type="json"><param name="includeProperties">userInfo\.userId,userInfo\.userName,userInfo\.password</param></result></action><action name="returnList" class="com.testAction "method="returnList"><result name="success" type="json"><param name="includeProperties">userInfosList\[\d+\]\.userName,userInfosList\[\d+\]\.password </param></result></action></package>4、只要继承extends="json-default",result type设置成json之后,容器会把action的属性自动封装到一个json对象中(json拦截器来做)5、includeProperties 参数:输出结果中需要包含的属性值,这里正则表达式和属性名匹配,可以用“,”分割填充多个正则表达式。

struts2+json+jquery实现ajax登录和注册功能

struts2+json+jquery实现ajax登录和注册功能

在上一篇博文中已经学习了如何整合mybatis和spring,实现持久层的CRUD操作、业务层的事务管理和spring的IoC。

现在我们这个demo的基础上,继续整合struts2,并利用json插件和jquery实现ajax,完成后系统将实现登录与注册的简单功能。

浏览器端如何简单、高效地与服务器端进行数据交互是web开发者最为关心的内容。

在客户端构造intput表单数据或者拼凑URL参数名称/参数值,然后在服务器端笨拙地用request.getParameter(“参数名称”)获取参数显然已经过时了,在struts2中,只要在action 里定义了input表单名称/URL参数名称对应的String类型属性,并设置getter和setter 方法,struts2在调用action的时候就可以根据参数值自动帮你设置好action中对应的属性值供你使用,这极大地方便了开发者。

但是json更为强大——它可以根据浏览器端上传的符合格式的数据设置action中对象的值,也就是说,struts2自动封装的数据只有一层,而json是无限层。

json给页面参数的传递带来极大的方便,结合jquery来使用,可以轻易地做到页面局部刷新、页面无跳转进行友好的系统异常提示等,其中后者是我觉得最有必要做到的一点,在action中定义一个message变量,把action方法执行的结果或者系统异常信息放到里面以json的方式返回给客户端,客户端根据这个变量的结果来进行下一步的操作或者提示系统异常信息,非常地好用。

json由javascript中的对象和数组构成,基本形式是{key:value},key为属性名称,value 为属性值,value可以为数字、字符串、数组、对象,value可以为数组和对象是json可以封装无限层数据的关键所在。

至于如何建构和解析json不是本篇博文的详细表述范围,请参考其他资料。

现在就让我们利用struts2作为MVC框架,整合json插件,在浏览器端使用jquery解析和系列化json数据,由此制作一个具有登陆/注册功能的小demo。

Java与JSON的数据交互与解析方法

Java与JSON的数据交互与解析方法

Java与JSON的数据交互与解析方法随着互联网的快速发展,数据交互成为了现代软件开发中不可或缺的一部分。

在这个过程中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,被广泛应用于各种编程语言中。

而对于Java开发者来说,掌握Java与JSON 的数据交互与解析方法是非常重要的。

首先,我们来了解一下JSON的基本概念。

JSON是一种基于文本的数据交换格式,它由键值对组成,使用简单的语法来表示数据结构。

JSON可以表示简单的数据类型,如字符串、数字、布尔值等,也可以表示复杂的数据结构,如数组和对象。

在Java中,我们可以使用各种库和工具来进行JSON的数据交互与解析。

在Java中,常用的JSON库有Gson、Jackson和Fastjson等。

这些库提供了一系列的API和工具,使得Java与JSON之间的数据交互变得非常简单。

下面,我们将介绍一些常用的数据交互与解析方法。

首先,我们来看一下如何将Java对象转换为JSON格式的数据。

假设我们有一个名为Person的Java类,它包含了姓名、年龄和性别等属性。

我们可以使用JSON库提供的API将Person对象转换为JSON格式的数据。

以Gson库为例,我们可以使用以下代码实现:```javaPerson person = new Person("张三", 25, "男");Gson gson = new Gson();String json = gson.toJson(person);```上述代码中,我们首先创建了一个Person对象,并设置了相应的属性。

然后,我们创建了一个Gson对象,通过调用toJson方法将Person对象转换为JSON格式的字符串。

接下来,我们来看一下如何将JSON格式的数据解析为Java对象。

同样以Gson库为例,我们可以使用以下代码实现:```javaString json = "{\"name\":\"张三\",\"age\":25,\"gender\":\"男\"}";Gson gson = new Gson();Person person = gson.fromJson(json, Person.class);```上述代码中,我们首先创建了一个JSON格式的字符串,其中包含了姓名、年龄和性别等属性。

使用JSON进行网络数据交换传输详细

使用JSON进行网络数据交换传输详细

使用JSON进行网络数据交换传输详细JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于前端与后端的网络数据传输。

它以键值对的形式组织数据,并以简洁易读的方式表示复杂的数据结构。

在网络通信中,JSON可以作为通过HTTP请求传输数据的一种格式,而JSON解析器可以将接收到的JSON文本转换为对应的数据结构。

本文将详细介绍使用JSON进行网络数据交换传输的过程。

首先,需要明确网络数据交换传输的两个角色:发送方和接收方。

发送方负责将需要传输的数据封装成JSON格式,然后通过网络发送给接收方。

接收方接收到JSON数据后,通过JSON解析器将其解析成对应的数据结构,从而能够对数据进行处理。

发送方的工作流程如下:1.确定需要传输的数据:发送方首先需要明确想要传输的数据,例如用户的姓名、年龄等。

2. 组织数据成JSON格式:将需要传输的数据按照键值对的方式组织成JSON格式。

例如,{"name": "Tom", "age": 20} 是一个包含姓名和年龄的JSON对象。

3.发送JSON数据:使用网络通信协议(如HTTP)将JSON数据发送给接收方。

可以使用编程语言提供的网络通信库来实现。

接收方的工作流程如下:1.接收JSON数据:接收方通过网络接收到发送方发送的JSON数据。

2.解析JSON数据:使用JSON解析器将接收到的JSON数据解析成对应的数据结构。

不同编程语言提供了各自的JSON解析器,可以根据实际需求选择合适的解析器。

3.处理数据:接收方可以根据需要对解析后的数据进行处理,例如存储到数据库、展示在前端界面等。

JSON的优势及其适用场景:1.简洁易读:JSON使用键值对的格式组织数据,使其更易于理解和阅读。

2.跨平台、跨语言:JSON是一种独立于编程语言和平台的数据格式,可以在不同的系统和编程语言中进行数据交换。

Struts2配置json数据返回

Struts2配置json数据返回

Struts2配置json数据返回(作者:张宗杰时间:2012-05-07)从事软件编程工作近3个月来,在项目中经常的使用到json数据格式。

由于公司的框架已经高度封装好了,我们只需用java调用相关的类,即可向浏览器返回json数据格式,但本人对这个十分好奇,今天抽空研究了下在struts2下如何自己配置json数据返回方法。

首先,在myeclipse中新建一个java web工程,接着引入Struts2必须的jar包,这时要使用json,还需多引入一个名字为“struts2-json-plugin-2.3.1.2.jar”的jar包(版本号和你下载的struts2有关,本人使用的是struts-2.3.1.2),结构如图1所示:图1jar包引入同时把jquery.js也放到工程中,后面采用javascript读取出服务器返回的json数据。

然后配置web.xml文件,具体步骤不说了,如果不会struts2的,自己先去学习一下,然后再看本文章。

然后在struts.xml中新增如图2所示代码,用于strust2识别json:图2json配置我们可以自己手工的用java代码输出json数据格式,同时也可以使用很多开源的类来来实现(可以访问去下载java的json相关类)。

在这里,我使用org.json。

下载下来后,解压出源码,对照着在myeclipse中建立出包结构,把这些源代码放到里面,如图3所示:图3引入org.json接着在com.ajie包下建立JsonTest.java类,继承ActionSupport类。

然后建立一个方法,实现向客户端返回http的数据,如图4所示:图4接着实现strust2的execute方法,代码如图5所示:图5上述代码,封装了2个json值,分别是test和msg。

然后在index.jsp中编写html代码和js代码,html代码如图6所示:图6Js代码如图7所示:图7然后将web工程部署到tomcat中,运行,打开浏览器,运行后看到如图8所示界面:图8接着,打开firebug,点击按钮后观察http的传输流程,结果如图9所示:图9浏览器也将弹出一个对话框,显示json中test对应的值,如图10所示:图10本文只是讲述了如何在struts2中使用json,只要稍微修改就可以在项目中运用。

01、struts2(Struts2开发入门 、常用配置、参数传递) - 副本

01、struts2(Struts2开发入门 、常用配置、参数传递) - 副本

1. Struts2简介1.1. 什么是Struts21.1.1. Struts2的概念Struts2是轻量级的MVC框架,它主要解决了请求分发的问题,重心在于控制层和表现层。

轻量级,指的是Struts2具有较低的侵入性,就是它对我们业务代码的依赖程度很低,简单来说,在使用Struts2框架时,我们的业务代码中基本上不需要import它的包。

Struts2实现了MVC,满足了MVC设计思想。

在我们使用Struts2做开发的时候,就相当于使用了MVC,这是Struts2自动帮助我们实现的,是默认的、隐含的,我们不需要再写特别的代码来实现MVC了。

作为一个框架,Struts2提供了一系列的API,我们可以使用它们来简化代码的编写,从而提升开发效率。

这些API复用程度很高,对业务代码的依赖性也很小,甚至很多是Struts2自动调用的,因此在很大程度上,我们的开发变得可以复用。

Struts2解决请求分发的问题,我们会在后面为什么使用Struts2中讲解。

重心在控制层和表现层,是纵观整个Struts2理论课程来看的,从中我们会体会到这一点,随着大家对Struts2的逐步了解,届时我们再回顾这一点。

1.1.2. 什么是MVCMVC是代码的分层思想,是软件设计领域经典的设计模式。

它根据代码功能的不同,将一个软件的代码分为3部分,即模型、视图、控制器,这3部分代码的含义和功能如下。

1、M-Model 模型模型(Model)的职责是负责业务逻辑。

包含两层:业务数据和业务处理逻辑。

比如实体类、DAO、Service都属于模型层。

2、V-View 视图视图(View)的职责是负责显示界面和用户交互(收集用户信息)。

属于视图的组件是不包含业务逻辑和控制逻辑的JSP。

3、C-Controller 控制器控制器是模型层M和视图层V之间的桥梁,用于控制流程。

比如:在Servlet项目中的单一控制器ActionServlet。

关于Struts-JSON配置(详解带实例struts2的json数据支持)

关于Struts-JSON配置(详解带实例struts2的json数据支持)

关于Struts-JSON配置(详解带实例struts2的json数据支持)关于Struts-JSON的提高开发效率一、JSON是什么?:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。

易于人阅读和编写,同时也易于机器解析和生成。

它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。

JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C , C#, Java, JavaScript, Perl, Python等)。

这些特性使JSON成为理想的数据交换语言。

二、struts2对于JSON有什么支持?:struts2提供了一个struts2-json-plugin.jar 用于支持JSON的使用。

当我们在struts2中使用JSON的时候必须导入struts2-json-plugin.jar并且需要一下几点:1.<package name="struts2" extends="json-default">//必须是继承struts2-json-plugin.jar中struts-plugin.xml文件中的定义的json-default/* struts2-json-plugin.jar中struts-plugin.xml配置信息:<struts><package name="json-default" extends="struts-default"> <result-types><result-type name="json" class="org.apache.struts2.json.JSONResult"/></result-types><interceptors><interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/> </interceptors></package></struts>通过配置信息我们可以知道:1.json-default其实是继承了struts-default的2.定义了一个name为json的返回类型和一个name为json的拦截器 */2.<action name="*" class="*"><result name="success" type="json"/></action>//我们需要将result的返回类型定义为json三、关于JSON在struts.xml中的一些属性的功能。

Struts2-Json-Plugin 的使用

Struts2-Json-Plugin 的使用

Struts2-Json-Plugin 的使用在Struts2 中要使用Ajax 获得Json 数据我认为目前还是struts2-json-plugin 了。

当然你你可以用手工用像XStream、Google Gson、Jackson 这样的工具手工把Java 对象转换成Json 字符串再写往Response 去,要写的代码自然多不了,还得留心字符集与content type。

而struts2-json-plugin 毫无疑问是与Struts2 最亲近了,只需你配置一些属性就能得到你想的结果。

本想分几篇逐步介绍如何使用struts2-json-plugin 的,然而就在现在发现官方的struts2-json-plugin 指南已经很详细了,所以干脆翻译一下/2.2.1.1/docs/json-plugin.html,同时自己加深对它的理解。

JSON 插件提供了一个"json" 结果类型来把action 序列化成JSON. 这一序列化的过程是递归的, 意即整个对象图,从action 类开始(未包括基类) 将会被序列化(可以用"root" 属性来指定自己的根对象). 如果使用了json 拦截器, action 将可通过请求中的JSON 内容组装出来, 该拦截器遵循以下几条规则:"content-type" 必须为"application/json"JSON 内容必须是格式良好的, 参考 中的语法.Action 里必须有欲获取值的属性的相应public 的"setter" 方法.所支持的类型有: 原始类型(int,long...String), Date, List, Map, 原始类型数组, 其他的类(将会支持更多), 和其他类型的数组.JSON 中的任何将要被填入到list 或map 中的对象会是Map 类型(属性映射到值), 任何整数都是Long 类型, 任何小数会是Double 类型, 任何数组会是List 类型.给定下面的JSON 字符串:{"doubleValue": 10.10,"nestedBean": {"name": "Mr Bean"},"list": ["A", 10, 20.20, {"firstName": "El Zorro"}],"array": [10, 20]}action 中必须有一个"setDoubleValue" 方法, 参数为"float" 或者"double"(拦截器将会把值转换为相应的类型). 还必须有一个"setNestedBean" 方法,它的参数类型可以为任何类类型, 其中含有参数为"String" 的"setName" 方法. 还必须有一个参数为"List" 的"setList" 方法, 这个List 中将会包含: "A" (String), 10 (Long), 20.20 (Double), Map ("firstName" -> "El Zorro"). "setArray" 方法可以是"List", 或任何数字类型数组作参数的.序列化你的对象成javascript 的JSON, 参考json2安装本插件可通过把插件jar 包到你的应用的/WEB-INF/lib 目录来完成安装. 没有别的文件需要拷贝或被创建.使用maven 的话, 加入下列到你的pom 中:<dependencies>...<dependency><groupId>org.apache.struts</groupId><artifactId>struts2-json-plugin</artifactId><version>STRUTS_VERSION</version></dependency>...</dependencies>定制化序列化和反序列化使用JSON 注解来达到定制序列化和反序列化过程. 可用的JSON 注解如下:名称描述默认值序列化反序列化name 定制字段名empty yes noserialize 标识为可被序列化true yes nodeserialize 标识为可被反序列化true no yesformat 用于格式化或解析Date 字段的格式"yyyy-MM-dd'T'HH:mm:ss" yes yes排除属性逗号分隔的正则表达式列表可传递给JSON Result 和Interceptor(拦截器), 被任何一个正则表达式匹配的属性将会在序列化过程时忽略掉:<!-- Result fragment --><result type="json"><param name="excludeProperties">login.password,studentList.*\.sin</param></result><!-- Interceptor fragment --><interceptor-ref name="json"><param name="enableSMD">true</param><param name="excludeProperties">login.password,studentList.*\.sin</param></interceptor-ref>包含属性逗号分隔的正则表达式列表可被传递给JSON Result, 用于限制哪些属性可用于序列化. 只有当能够匹配任何一个正则表达式的属性才会包含在序列化输出中.排除属性表达式优先于包含属性的表达式. 那就是说, 如果包含和排除表达式应用于同一个结果, 包含表达式对于被排除表达式匹配到的属性是不起作用的.<!-- Result fragment --><result type="json"><param name="includeProperties">^entries\[\d+\]\.clientNumber,^entries\[\d+\]\.scheduleNumber,^entries\[\d+\]\.createUserId</param></result>根对象使用"root" 属性(OGNL 表达式) 指定被用于序列化的根对象.<result type="json"><param name="root">person.job</param></result>"root" 属性(OGNL 表达式) 也可以用于拦截器来指定被组装的对象, 确保这个对象不会是null.<interceptor-ref name="json"><param name="root">bean1.bean2</param></interceptor-ref>包装可能会有某些原因,你想要用些文本对JSON 输出包装一下, 像用注释包裹, 加上前缀, 或使用文件上载让结果显示在textarea 之中. 用wrapPrefix 在开始处加上内容,wrapPostfix 添加内容在尾端. 这两个参数优先使用,而"wrapWithComments" 和"prefix" 自从0.34 后就不推荐使用. 例子:进行注释:<result type="json"><param name="wrapPrefix">/*</param><param name="wrapSuffix">*/</param></result>添加前缀:<result type="json"><param name="wrapPrefix">{}&&</param></result>包裹上传的文件内容:<result type="json"><param name="wrapPrefix"><![CDATA[<html><body><textarea>]]></param><param name="wrapSuffix"><![CDATA[</textarea></body></html>]]></param></result>wrapWithComments 自0.34 不推荐使用, 建议用wrapPrefix 和wrapSuffix.wrapWithComments 可使得安全的JSON 文本变得不安全. 例如,["*/ alert('XSS'); /*"]谢谢Douglas Crockford 的提示! 应考虑用prefix.假如被序列化的JSON 是{name: 'El Zorro'}. 那么此时输出就会是: {}&& ({name: 'El Zorro'}假如"wrapWithComments" (默认为false) 属性被设为true, 生成的被包裹上注释的JSON 就如下:/* {"doubleVal": 10.10,"nestedBean": {"name": "Mr Bean"},"list": ["A", 10, 20.20, {"firstName": "El Zorro"}],"array": [10, 20]} */欲取消上面的注释,可用:var responseObject = eval("("+data.substring(data.indexOf("\/\*")+2, stIndexOf("\*\/"))+")");前缀prefix 从0.34 后不建议用, 请用wrapPrefix 和wrapSuffix.假如参数prefix 被设置为true, 生成的JSON 将被附上前缀"{}&& ". 这有助于防止被劫持. 详细内容请看this Dojo Ticket:<result type="json"><param name="prefix">true</param></result>基类默认时,定义在"root" 对象的基类中的属性不会被序列化, 要序列化来自于所有基类(直到Object) 中的属性,需在JSON result 里设置"ignoreHierarchy" 为false:<result type="json"><param name="ignoreHierarchy">false</param></result>枚举类型默认的, Enum 被序列化为name=value 对,这里的value = name().public enum AnEnum {ValueA,ValueB}JSON: "myEnum":"ValueA"使用result 的参数"enumAsBean" 可使得Enum 像一个bean 一样的被序列化,特定的属性为_name,值为name(). 所有的枚举属性都会被序列化.public enum AnEnum {ValueA("A"),ValueB("B");private String val;public AnEnum(val) { this.val = val; } public getVal() {return val;}}JSON: myEnum: { "_name": "ValueA", "val": "A" }在struts.xml 中启用该参数:<result type="json"><param name="enumAsBean">true</param></result>压缩输出.设置enableGZIP 属性为true 可用gzip 压缩响应输出. 在请求后"Accept-Encoding" 头中必须包含"gzip" 才能正常工作.<result type="json"><param name="enableGZIP">true</param></result>防止浏览器缓存响应数据noCache 设置为true(默认为false) 会设置如下响应头:Cache-Control: no-cacheExpires: 0Pragma: No-cache<result type="json"><param name="noCache">true</param></result>排除值为null 的属性默认的,为null 的字段也被序列化,生成像{property_name: null}. 这能够通过设置excludeNullProperties 为true 来防止.<result type="json"><param name="excludeNullProperties">true</param></result>状态和错误代码使用statusCode 来设置响应状态代码:<result type="json"><param name="statusCode">304</param></result>同时可用errorCode 来发送一个错误(the server might end up sending something to the client which is not the serialized JSON):<result type="json"><param name="errorCode">404</param></result>JSONPTo enable JSONP, set the parameter callbackParameter in either the JSON Result or the Interceptor. A parameter with that name will be read from the request, and it value will be used as the JSONP function. Assuming that a request is made with the parameter "callback"="exec":<result type="json"><param name="callbackParameter">callback</param></result>And that the serialized JSON is {name: 'El Zorro'}. Then the output will be: exec({name: 'El Zorro'})Content TypeContent type will be set to application/json-rpc by default if SMD is being used, or application/json otherwise. Sometimes it is necessary to set the content type to something else, like when uploading files with Dojo and YUI. Use the contentType parameter in those cases.<result type="json"><param name="contentType">text/html</param></result>ExampleSetup ActionThis simple action has some fields:Example:import java.util.HashMap;import java.util.Map;import com.opensymphony.xwork2.Action;public class JSONExample {private String field1 = "str";private int[] ints = {10, 20};private Map map = new HashMap();private String customName = "custom";//'transient' fields are not serializedprivate transient String field2;//fields without getter method are not serializedprivate String field3;public String execute() {map.put("John", "Galt");return Action.SUCCESS;}public String getField1() {return field1;}public void setField1(String field1) {this.field1 = field1;}public int[] getInts() {return ints;}public void setInts(int[] ints) {this.ints = ints;}public Map getMap() {return map;}public void setMap(Map map) {this.map = map;}@JSON(name="newName")public String getCustomName() {return this.customName;}}Write the mapping for the actionAdd the map inside a package that extends "json-default"Add a result of type "json"Example:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""/dtds/struts-2.0.dtd"><struts><package name="example" extends="json-default"><action name="JSONExample"><result type="json"/></action></package></struts>JSON example output{"field1" : "str","ints": [10, 20],"map": {"John":"Galt"},"newName": "custom"}JSON RPCThe json plugin can be used to execute action methods from JavaScript and return the output. This feature was developed with Dojo in mind, so it uses Simple Method Definition to advertise the remote service. Let's work it out with an example(useless as most examples).First write the action:package smd;import com.googlecode.jsonplugin.annotations.SMDMethod;import com.opensymphony.xwork2.Action;public class SMDAction {public String smd() {return Action.SUCCESS;}@SMDMethodpublic Bean doSomething(Bean bean, int quantity) {bean.setPrice(quantity * 10);return bean;}}Methods that will be called remotely must be annotated with the SMDMethod annotation, for security reasons. The method will take a bean object, modify its price and return it. The action can be annotated with the SMD annotation to customize the generated SMD (more on that soon), and parameters can be annotated with thodParameter. As you can see, we have a "dummy", smd method. This method will be used to generate the Simple Method Definition (a definition of all the services provided by this class), using the "json" result.The bean class:package smd;public class Bean {private String type;private int price;public String getType() {return type;}public void setType(String type) {this.type = type;}public int getPrice() {return price;}public void setPrice(int price) {this.price = price;}}The mapping:<package name="RPC" namespace="/nodecorate" extends="json-default"><action name="SMDAction" method="smd"><interceptor-ref name="json"><param name="enableSMD">true</param></interceptor-ref><result type="json"><param name="enableSMD">true</param></result></action></package>Nothing special here, except that both the interceptor and the result must be applied to the action, and "enableSMD" must be enabled for both.Now the javascript code:<s:url id="smdUrl" namespace="/nodecorate" action="SMDAction" /><script type="text/javascript">//load dojo RPCdojo.require("dojo.rpc.*");//create service object(proxy) using SMD (generated by the json result)var service = new dojo.rpc.JsonService("${smdUrl}");//function called when remote method returnsvar callback = function(bean) {alert("Price for " + bean.type + " is " + bean.price);};//parametervar bean = {type: "Mocca"};//execute remote methodvar defered = service.doSomething(bean, 5);//attach callback to defered objectdefered.addCallback(callback);</script>Dojo's JsonService will make a request to the action to load the SMD, which will return a JSON object with the definition of the available remote methods, using that information Dojo creates a "proxy" for those methods. Because of the hronous nature of the request, when the method is executed, a deferred object is returned, to which a callback function can be attached. The callback function will receive as a parameter the object returned from your action. That's it.Proxied objectsAs annotations are not inherited in Java, some user might experience problems while trying to serialize objects that are proxied. eg. when you have attached AOP interceptors to your action.In this situation, the plugin will not detect the annotations on methods in your action.To overcome this, set the "ignoreInterfaces" result parameter to false (true by default) to request that the plugin inspects all interfaces and superclasses of the action for annotations on the action's methods.NOTE: This parameter should only be set to false if your action could be a proxy as there is a performance cost caused by recursion through the interfaces.<action name="contact" method="smd"><interceptor-ref name="json"><param name="enableSMD">true</param><param name="ignoreSMDMethodInterfaces">false</param></interceptor-ref><result type="json"><param name="enableSMD">true</param><param name="ignoreInterfaces">false</param> </result><interceptor-ref name="default"/></action>。

通过代码示例学习JSon在Java和Struts2中的应用技术

通过代码示例学习JSon在Java和Struts2中的应用技术

前言JSON采用完全独立于语言的文本格式,从而使得在JavaScript相关程序中处理JSON 格式的数据不需要应用任何特殊的API或软件工具包,这使得JSON成为理想的数据交换语言。

随着Web应用的普及及AJAX相关应用的深入,客户端和Web服务器端需要频繁地交互数据;同时随着移动设备的普及,客户端的访问设备也逐渐多样化。

如何使得同一Web 服务器能够响应不同的终端设备,并且都能够进行数据交互。

目前比较好的技术实现手段是应用JSon相关的技术。

作者根据自身多年的软件开发实践和经验总结,结合多年的IT职业培训的教学和高校软件学院一线的教学工作体验,在本系列文档中将从多个不同的方面和通过具体的程序代码示例为读者介绍JSon及相关的应用技术。

本文档主要涉及如何将Java对象转换为JSON 对象字符串、将JSON格式的对象字符串转换为Java对象、JSON在J2EE Web应用中实现数据交换的示例和应用AJAX+JSON+Struts2技术实现数据查询的应用示例等内容。

欢迎读者下载相关的技术资料阅读和收藏,并提出良好的建议。

感兴趣的读者可以在百度文库页面中搜索“杨少波”,将能够搜索到杨教授工作室精心创作的优秀程序员职业提升必读系列技术资料。

这些资料将系统地从软件设计和开发实现的“设计思想”、“管理策略”、“技术实现”和“经验方法”等方面与读者进行充分的交流,也欢迎读者发表和交流自己对软件开发、课程设计、项目实训、技术学习的心得体会。

本文目录1.1将Java对象转换为JSON对象字符串 (3)1.1.1JSON-lib系统库及开发环境搭建 (3)1.1.2将布尔类型数组转换为JSON格式的对象字符串 (6)1.1.3将字符串数组转换为JSON格式的对象字符串 (9)1.1.4将List集合对象转换为JSON格式的对象字符串 (10)1.1.5将Map集合对象转换为JSON格式的对象字符串 (11)1.1.6将Set集合对象转换为JSON格式的对象字符串 (11)1.1.7将PO对象转换为JSON格式的对象字符串 (12)1.1.8将List集合(包装PO对象)转换为JSON格式的对象字符串 (13)1.2将JSON格式的对象字符串转换为Java对象 (14)1.2.1将JSON格式的字符串转换为Java对象 (14)1.2.2将JSON对象数组字符串转换为Java对象数组 (15)1.2.3将JSON对象数组字符串转换为List集合对象 (16)1.3JSON在J2EE Web应用中实现数据交换的示例一 (18)1.3.1构建相关的JSP页面和后台处理的Servlet程序 (18)1.3.2进一步完善示例中的相关程序 (23)1.4JSON在J2EE Web应用中实现数据交换的示例二 (28)1.4.1构建JSP页面和相关的JS程序 (28)1.4.2构建系统中后台相关的系统库和程序 (33)1.5构建基于Struts2框架的示例项目 (52)1.5.1构建基于Struts2框架的Web项目 (52)1.5.2应用EL表达式和JSTL标签库显示出数据 (65)1.5.3实现系统的数据访问层相关程序 (68)1.6应用AJAX+JSON+Struts2技术实现数据查询 (71)1.6.1构建示例页面及相关的JS程序 (71)1.6.2构建示例中Struts2相关的后台处理程序 (80)1.6.3测试目前的示例实现效果 (85)1.6.4解决AJAX表单请求中的中文乱码问题 (86)1.1将Java对象转换为JSON对象字符串1.1.1JSON-lib系统库及开发环境搭建1、JSON-lib系统库(1)主要的功能JSON-lib系统库不仅可以实现将JavaBean(实体)、集合对象(如List、Set和Map等类型)等形式的Java对象或者XML数据转换成JSON格式的字符串,也还能够把JSON格式的字符串转换回JavaBean 等二进制对象。

easyui结合struts2总结

easyui结合struts2总结

easyui 结合Struts2 总结1 在把struts2框架搭好以后,由于easyui和后台交互主要是靠ajax来进行的并且返回的数据格式是json形式的。

所以我们必须在项目中引入struts2-json-plugin 来方便的把数据转换为json格式。

需要的jar包如下图:下面是我写的一个小例子,来更好的说明之间数据是如何传递的。

(为了节省篇幅,数据库表就省略了)jsp页面主要代码如下:当我们把页面写好以后就要写action类了。

主要代码如下:get、set方法这里就省略了。

接下来就是在struts.xml 中进行配置了。

代码如下这里要特别注意了,继承的是json-default, result 中德type是json。

这里的配置是关键,起初由于配置问题,花了我很多时间。

然后就是写EmpService类和getAll方法了。

代码如下这里我是把对象先放到map集合中,让和放到list集合中,这样就自动转为json 格式(感觉有些麻烦,谁有好的方法,请发送到zl673170035@,谢谢哈)然后在浏览器上运行。

在js 中加入了工具条。

剩下的修改、删除、增加,我是仿照easyui官网的demo中的一个例子做的。

我遇到的主要问题就是,ajax 如何把参数传给action和ajax如何接收action传回的参数。

首先说说第一个问题,ajax 如何把参数传给action.。

只要action 中有相对应的get和set 方法。

我们发起ajax请求时struts就自动的把参数加到action中了。

这里把参数名都变为emp.XX 然后在action 中加入成员变量emp和get、set 方法。

这样action就能接收值了。

接下来需要从action中给ajax中传递参数了。

我们在struts.xml中如下配置在action中设置result 的get、set 方法。

这样ajax就能接收到action传回的参数了。

计算机java实习日记

计算机java实习日记

计算机java实习日记【篇一:计算机毕业实习日记34篇】实习日记一20010-4-1星期四实习的第一天,感觉心里空空的,毕竟昔日在学校的作息时间,一下子被工作所取代,还真有点不适应。

其实在此之前我也作好了进入社会的准备,以前经历过一次毕业,现在总比第一次毕业时“无所适从”的感觉要好很多,心态也放得更为平和。

如果真要说点与众不同的话,那就是明显感觉到:多了一些信心与实在。

二2010-4-2星期五今天下班后回宿舍上机调试程序,一个java网站,用tomcat作服务器,在被浏览器加载的时候总是无法显示出来,页面提示出错信息:500错误。

到服务器日志查找原因,有一个“数据加载失败”的提示。

数据库用的是sql server2000,原以为是tomcat配置文件的问题,到网上查了很多相关资料,改了又改一直没搞定,头都大了,一直到12点才郁闷的关机睡觉!三2010-4-5星期一工作也两三天了,员工也已熟悉,可惜他们都不是编程高手,要不我就可以直接向他们问一些我在做网站时遇到的难题了。

唉,谁叫我找一个与专业不怎么相干的单位来实习呢!可说归说,事还得做:与客户交谈,打电话询问相关事宜,遇到好心的客户还好,不会刁难你,要是来了一个挑三检四的就不好应付了,至少你得耍点小聪明,当然不能惹客户不高兴,要不过后会接到老板的“呼叫”的。

其实最简单的对付办法也很简单:你只管顺着客户的意思,点头即可!四2010-4-6星期二最近到网上找了些视频资料,看后很过瘾,可看归看,一动手写代码就伤神了。

忘说内容了,其实看的就几个与java编程相关的开源框架(struts+spring+hibernate)而已,不过涉及到的东西就多了,开发平台用的是eclipse+myeclipse,这个还好应付,装上设一下环境变量就搞定,跟jdk差不多。

难的是在这之上的插件的应用,要知道开源的东西特多,很多其实多差不多,但你却不得不花时间去了解,而且版本的兼容性问题有时会让你不知从哪处理是好。

java相关的Struts2-Json插件的使用例子

java相关的Struts2-Json插件的使用例子

The JSO N p lug in p ro vid es a "js on" re sult type that se ria lizes a ctio ns into JSO N. The se ria liza tion p ro cess is re curs ive, me aning that the w ho le ob je ct g r a ph, s ta rting on the a ctio n class (b ase class not include d) w ill b e s e ria lize d (r o ot ob je ct ca n be cus to mize d us ing the "ro ot" a ttribute). If the inte rcep to r is used, the a ction w ill b e pop ulate d fro m the JSO N co ntent in the re ques t, thes e a re the rules o f the inte rce pto r:1The "conte nt-type" must be "a pp lica tio n/jso n"2The JSO N co nte nt mus t b e we ll fo rme d, s ee js on.o rg fo r g ra mma r.3Actio n mus t ha ve a p ub lic "s ette r" me tho d fo r fie ld s tha t mus t b e p o pula ted.4Sup po rte d type s fo r p op ula tio n a re: P rimitive s (int,long...String), Da te, Lis t, Map, P rimitive Arra ys, O the r cla ss (mo re o n this la te r), a nd Array o f O the r clas s.5Any o b je ct in JSO N, tha t is to b e p op ula ted ins ide a lis t, o r a ma p, w ill b e o f type Map (ma p p ing fro m p rope rtie s to va lues), a ny who le numbe r w ill b e o f type Long, a ny de cima l numbe r w ill be o f type Doub le, and a nya rra y o f type Lis t.JSON插件提供一种叫做“json”返回类型,来将action序列化成JSON 格式。

jQuery学习之:jqGrid表格插件——从Struts2获得数据

jQuery学习之:jqGrid表格插件——从Struts2获得数据

之前谈到了jqGrid与Serlvet/JSP集成,实际上就是Servlet按jqGrid对数据的要求返回相应的数据,Servlet中是通过PrintWriter输出数据的,那时,我们用到了json-lib来构建Json数据。

现在来谈谈jqGrid如何与Struts2集成。

对于Struts2,同样需要按jqGrid的要求返回相应的json数据格式。

当然,我们可以在Struts2的Action中通过返回 null来干Servlet一样的事情,这样也能够同Servlet一样实现与jqGrid集成。

然而,此时Struts2实际上相当于没有。

既然用到了 Struts2,我们就应该用Struts2为我们提供的方法。

而且,在Struts的Action中应该尽量避免使用request 之类的 Servlet对象,用Struts2更是如此。

在struts1.x中,request直接就有的,因而在开发中总会有人“打着struts的旗帜,干着Servlet的勾当”。

我们知道,request等是依赖于Servlet容器的,Struts2把这些屏蔽了,Struts2的Action可以直接是POJO,因而我们更不应该违反Struts2的设计原则,硬是去“干Servlet的勾当”。

闲话不说,开始咱们的正题。

在Struts2的jar包中,有一个struts2-json-plugin.jar,它就是用于处理json数据的(Struts2提供了很多插件),我们就是应用它来实现struts2与jqGrid的集成。

1、效果图:2、代码与解释:HTML代码:<;body>;<;tableid=";gridTable";>;<;/ table >;<;divid=";gridPager";>;<;/ div >;<;/ body >;JavaScript代码:$(function (){$(";#gridTable"; ).jqGrid({url:'json/jqgrid.action',datatype:";json"; ,height: 250,colNames:['编号','用户名', '性别', '邮箱', 'QQ','手机号','出生日期'],colModel:[{name:'id',index:'id', sorttype:";int"; },{name:'userName',index:'userName',{name:'gender',index:'gender',{name:'email',index:'email', ;string";},{name:'QQ',index:'QQ', ;{name:'mobilePhone',index:'mobilePhone', ;{name:'birthday',index:'birthday', sorttype:";date"; }],sortname:'id',sortorder:'asc',viewrecords:true ,rowNum:10,rowList:[10,20,30],jsonReader: {root:";dataRows"; ,// 数据行(默认为:rows)page:";curPage"; ,// 当前页total:";totalPages"; ,// 总页数records:";totalRecords"; ,// 总记录数repeatitems :false// 设置成false,在后台设置值的时候,可以乱序。

前端到后端 json 处理过程

前端到后端 json 处理过程

前端到后端 json 处理过程前端到后端的JSON处理过程涉及到前后端数据交互的过程,包括数据的序列化和反序列化等步骤。

下面我将从多个角度来详细解释这个过程。

1. 前端发送JSON数据至后端:当前端需要向后端发送数据时,通常会将数据封装成JSON 格式。

这个过程通常发生在用户与前端界面进行交互时,比如提交表单、点击按钮等操作。

前端通过JavaScript将用户输入的数据转换为JSON格式,然后使用HTTP请求(比如POST请求)将JSON数据发送给后端。

2. 后端接收JSON数据:后端接收到前端发送的JSON数据后,需要进行解析。

根据不同的后端编程语言和框架,可以使用相应的工具或库来解析JSON 数据。

比如在Java中可以使用Jackson库、在Python中可以使用json模块等。

通过解析JSON数据,后端可以获取前端发送过来的数据内容。

3. 后端处理JSON数据:一旦后端成功解析JSON数据,就可以对数据进行相应的处理,比如存储到数据库、进行逻辑处理、调用其他服务等。

后端根据业务逻辑对JSON数据进行相应的操作,然后生成相应的响应数据。

4. 后端返回处理结果至前端:后端处理完JSON数据后,会生成相应的处理结果,并将结果封装成JSON格式返回给前端。

同样,后端会使用HTTP响应将JSON数据发送给前端。

前端接收到后端返回的JSON数据后,可以根据需要进行解析并进行相应的展示或处理。

总结来说,前端到后端的JSON处理过程包括前端将数据封装成JSON格式并发送至后端,后端接收并解析JSON数据,对数据进行处理,然后将处理结果封装成JSON格式返回给前端。

这个过程涉及到数据的序列化和反序列化、数据传输和处理等环节,是前后端数据交互的重要环节。

Struts2返回JSON数据的具体应用范例

Struts2返回JSON数据的具体应用范例

Struts2返回JSON数据的具体应用范例早在我刚学Struts2之初的时候,就想写一篇文章来阐述Struts2如何返回JSON数据的原理和具体应用了,但苦于一直忙于工作难以抽身,渐渐的也淡忘了此事。

直到前两天有同事在工作中遇到这个问题,来找我询问,我又细细地给他讲了一遍之后,才觉得无论如何要抽一个小时的时间来写这篇文章,从头到尾将Struts2与JSON的关系说清楚。

其实网络中,关于这个问题的答案已是海量,我当初也是从这海量的答案中吸收精华,才将“Struts2返回JSON数据”这个问题搞清楚的。

但是这些海量的答案,有一个共同的缺陷,就是作者们只关注问题核心,即“如何在具体的Struts2应用中返回JSON数据到客户端”如何实现,而对于"为何要这样实现"以及实现的本质却解释的不甚了了,在笔者看来这只是“授人以鱼”而非笔者所推崇的“授人以鱼的同时,授人以渔”。

在这篇文章中,笔者将总结前辈们的经验,并结合自己的理解,来从理论到实践由浅入深的说明“Struts2返回JSON数据”这一问题。

JSON(JavaScript Object Notation)首先来看一下JSON官方对于“JSON”的解释:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。

易于人阅读和编写。

同时也易于机器解析和生成。

它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。

JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。

这些特性使JSON成为理想的数据交换语言。

JSON建构于两种结构:“名称/值”对的集合(A collection of name/value pairs)。

struts2 工作原理

struts2 工作原理

struts2 工作原理
Struts2是一个用于构建Java web应用程序的开源框架。

它的
工作原理可以简单概括为以下几个步骤:
1. 客户端发送请求:当用户在浏览器中访问一个Struts2应用
程序的URL时,客户端会发送一个HTTP请求到服务器。

2. DispatcherServlet接收请求:服务器上运行的Servlet容器
(如Tomcat)接收到HTTP请求后,会通过web.xml配置文
件将请求发送给Struts2的核心组件DispatcherServlet。

3. 动作(Action)处理:DispatcherServlet根据配置文件中的信息,确定请求对应的Action类,并创建该类的实例。

Action是一
个POJO(Plain Old Java Object)类,用于处理具体的业务逻辑。

4. 结果视图(View)解析:Action类中的方法执行完业务逻辑后,会返回一个结果视图。

Struts2的结果视图可以是JSP页面、HTML、JSON等格式。

DispatcherServlet根据配置文件中指定
的结果视图解析器,将结果视图转化为最终的响应内容。

5. 结果响应:DispatcherServlet将最终的响应内容发送给客户端,客户端浏览器会将响应内容渲染并呈现给用户。

在这个过程中,Struts2框架提供了一系列的核心组件来协助
处理请求和响应,包括拦截器(Interceptor)、值栈(ValueStack)、类型转换器(Type Converter)等。

这些组件
能够帮助开发者处理表单提交、数据验证、数据转换等常见的web开发任务,从而简化开发过程。

使用JSON进行网络数据交换传输详细

使用JSON进行网络数据交换传输详细

使用JSON进行网络数据交换传输详细JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,用于在不同平台上进行网络数据交换和传输。

它由JavaScript衍生而来,并逐渐成为一种通用的数据交换语言,广泛应用于Web服务和API的开发中。

JSON使用简单、易读且易于理解的文本格式。

它支持键值对、数组、嵌套结构和基本数据类型(字符串、数字、布尔值和空值),可以轻松地表示复杂的数据结构。

以下是JSON的一些主要特点和使用案例。

1. 简洁性:JSON采用了一种简洁的语法,易于编写和阅读。

它使用大括号{}表示对象,方括号[]表示数组,键值对使用冒号:分隔。

例如:{"name": "John", "age": 30}。

2.平台无关性:JSON可以在不同的编程语言和操作系统之间进行数据交换,因为它是文本格式,不依赖于特定的平台或编程语言。

3. 数据结构的灵活性:JSON支持嵌套结构,可以通过嵌套对象和数组来表示复杂的数据结构。

例如:{"name": "John", "age": 30, "address": {"street": "123 Main St", "city": "New York"}}。

4.兼容性:JSON可以与大多数编程语言进行互操作,几乎所有的现代编程语言都提供了JSON的解析和生成支持。

这意味着开发人员可以轻松地在不同平台上传输和解析JSON数据。

5. 数据交换:JSON常用于Web服务和API之间的数据交换。

通过使用JSON,服务器可以将数据以结构化的方式发送给客户端,而客户端可以解析这些数据并进行相应的处理。

6. 前后端分离:JSON在前后端分离的架构中非常常见。

struts2 实验报告

struts2 实验报告

1.系统分析与设计1.1系统功能描述本系统是个非常简单的注册、登录系统。

本系统的实现是基于Struts2、Spring、Hibernate三个框架,系统功能单一,业务逻辑简单。

当用户注册信用户时,就是向系统中增加一个新用户,对应的数据库增加一条记录。

当用户输入注册信息时,系统提供了基本的输入验证判断用户输入是否合法,只有当用户输入满足基本输入要求时,才会被提交到实际的登录系统,进行实际的登录处理。

系统还使用了随机产生的图形验证码来防止刷新,防止用户通过单击浏览器的书安心按钮来重复注册多个用户。

系统还提供了一种Ajax方式来验证用户输入的注册名是否有效,系统要求所有的用户名不能重复。

故当用户输完用户名后,系统立即在页面上方提示用户该用户名是否可用,如果系统中没有该用户名,则系统提示该用户名可用;否则提示用户该用户名重复,用户必须重新选择用户名注册。

当用户注册一个新用户名之后,就可以使用系统的登录功能来登录系统了,用户输入登录用的用户名、密码后,系统一样提供了基本的输入校验。

除此之外,系统还采用了随机产生图形验证码来防止恶意用户的暴力破解,系统随机生成一个图形验证码,而用户登录必须输入图形验证码中显示的字符串,只有用户输入的字符串和系统随机生成的验证码字符相同时,系统才允许用户登录。

1.2系统功能流程处理用户注册的流程图东北大学软件学院实践考核类课程(四)实验报告1.3数据库设计ColumnNarneDatatppe HOTH ULLAUTOI NC :FlagsDefaultValue Commentuser_id|S>INT(11)✓ ✓_|UNSIGNED _|ZEROFELLEBBQ username 心.VARCH.4.R(50]_|BINARYQ user_pass VARCHAR(50] ✓_|BIN4RYQ emailVARCHAR(100]1BIN4RY相关的映射文件:<hibernate-mapping package ="org.reg_login.model"><class name ="User"table ="usertable"〉<id name ="id"column ="user_id"><generator class ="identity"/> </id ><property name ="user"column ="user_name"not-null ="true"length ="50"unique ="true"/><property name ="pass"column ="userpass"n ot-null ="true"C=3length ="50"/><property name ="email"length ="100"/></class></hibernate-mapping >一旦提供了上面的映射文件,Hibernate 就可以理解User 和user_table 之间的对应关系。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

struts2和json交互文章分类:Java编程struts2.1.8.1+jquery1.4.2返回json数据1、引入包(本文中的包全部引自struts-2.1.8.1\lib):struts2-json-plugin-2.1.8.1.jarjson-lib-2.1.jarcommons-collections-3.2.jarcommons-beanutils-1.7.0.jarcommons-lang-2.3.jarcommons-logging-1.0.4.jarezmorph-1.0.3.jar这7个包是返回json形式的数据必须的。

因为json大量引用了Apache commons的包,所以要加入4个,commons包,除了commons的包外,还需要引入一个 ezmorph的包。

最后加入struts2必须的6个包:struts2-core-2.1.8.1.jarxwork-core-2.1.6.jarognl-2.7.3.jarfreemarker-2.3.15.jarcommons-fileupload-1.2.1.jarcommons-io-1.3.2.jar2、后台:1) Userinfo实体类代码public class UserInfo implements Serializable {private int userId;private String userName;private String password;get set方法略}2) Action类public class TestAction extends ActionSupport {private String message; //使用json返回单个值private UserInfo userInfo; //使用json返回对象private List userInfosList; //使用josn返回List对象get set方法略/*返回单个值*/public String returnMsg(){this.message = "成功返回单个值";return SUCCESS;}/*返回UserInfo对象*/public String returnUser(){userInfo = new UserInfo();userInfo.setUserId(10000);userInfo.setUserName("刘栋");userInfo.setPassword("123456");return SUCCESS;}/*返回List对象*/public String returnList(){userInfosList = new ArrayList<UserInfo>();UserInfo u1 = new UserInfo();u1.setUserId(10000);u1.setUserName("张三");u1.setPassword("111111");UserInfo u2 = new UserInfo();u2.setUserId(10001);u2.setUserName("李四");u2.setPassword("222222");userInfosList.add(u1);userInfosList.add(u2);return SUCCESS;}}3) struts.xml(必须继承json-default、json-default继承自struts-default)<package name="default" namespace="/json" extends="json-default"> <action name="returnMsg" class="com.testAction "method="returnMsg"><result name="success" type="json"><param name="root">validate</param></result></action><action name="returnUser "class="com.testAction " method="returnUser "><result name="success" type="json"><param name="includeProperties">userInfo\.userId,userInfo\.userName,userInfo\.password</param></result></action><action name="returnList" class="com.testAction "method="returnList"><result name="success" type="json"><param name="includeProperties">userInfosList\[\d+\]\.userName,userInfosList\[\d+\]\.password </param></result></action></package>3、前台:1) 页面引入jquery-1.4.2.js2) 代码如下:<script language="javascript">function getMsg(){$.ajax({url:'json/returnMsg.action',type:'post',dataType:'json',success:function(data){$("#result").html(data.message);}});}function getUser(){$("# result ").html("");$.ajax({url:'json/returnUser.action',type:'post',dataType:'json',success:function(data){$("#result").append("用户ID:"+erId+"").append("用户名:"+erName+"").append("密码:"+erInfo.password+"");}});}function getUserList(){$("# result ").html("");$.ajax({url:'json/returnList.action',type:'post',dataType:'json',success:function(data){$.each(erInfosList,function(i,value){$("#result").append("第"+(i+1)+"个用户").append("用户名:"+erName+"").append("密码:"+value.password+"");}}});}</script><div id="result"></div><input type="button" value="获得单个消息" onclick="getMsg()"/><input type="button" value="获得用户信息" onclick="getUser()"/><input type="button" value="获得用户列表" onclick="getUserList()"/>4、只要继承extends="json-default",result type设置成json之后,容器会把action的属性自动封装到一个json对象中(json拦截器来做),然后调用ajax的callback方法. 返回json数据5、includeProperties 参数:输出结果中需要包含的属性值,这里正则表达式和属性名匹配,可以用“,”分割填充多个正则表达式。

如:输出UserInfo的所有属性及UserInfo的userName属性<result type="json"><param name="includeProperties"> userInfo.*,userInfo \. userName </param></result>6、excludeProperties 参数:输出结果需要剔除的属性值,也支持正则表达式匹配属性名,可以用“,”分割填充多个正则表达式,类同includeProperties7、输出一个JSON List列表<result name="success" type="json"><param name="includeProperties">userInfosList\[\d+\]\.userName,userInfosList\[\d+\]\.password </param></result>其中userInfosList是action中的一个List类型的属性,userInfosList\[\d+\]\. userName表示,userInfosList中存储的对象0..end的userName属性(list中存储的对象必须有userName属性)。

相关文档
最新文档