在STRUTS2中如何使用JSON
json使用场景及使用方法

json使用场景及使用方法JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于Web应用中的数据传输和存储。
以下是JSON 的使用场景和使用方法:1. 数据传输:JSON常用于前后端之间的数据传输。
前端可以将数据序列化为JSON格式,通过AJAX请求发送给后端,后端则可以解析JSON数据,并根据需要进行处理和返回相应的数据。
2. 存储配置信息:JSON可以用来存储和配置应用程序的设置和参数。
通过将配置信息保存为JSON文件,可以实现动态修改和更新配置,而无需修改源代码。
3. API接口:许多Web服务和API都使用JSON作为数据交换的格式。
前端通过调用API接口获取JSON数据,然后解析和展示数据。
4. 数据存储:JSON也可以用来存储数据,特别适用于非关系型数据库或文档数据库。
在这种情况下,可以将JSON作为文档的格式,存储和检索数据。
使用JSON的方法如下:1. 序列化:将对象转换为JSON字符串的过程称为序列化。
可以使用编程语言中提供的JSON库或API来将对象转换为JSON格式。
2. 解析:将JSON字符串转换为对象的过程称为解析。
同样,可以使用JSON库或API来解析JSON字符串,并将其转换为对象或其他数据结构。
3. 访问和修改:一旦将JSON数据转换为对象,就可以通过点号或方括号来访问和修改其中的属性和值。
例如,对于以下JSON数据:```{"name": "John","age": 25,"email":"****************"}```可以使用``或`object["name"]`来访问和修改`name`属性的值。
总之,JSON在Web开发中被广泛应用于数据交换和存储,通过序列化和解析的方式可以方便地处理JSON数据。
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对象

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 参数:输出结果中需要包含的属性值,这里正则表达式和属性名匹配,可以用“,”分割填充多个正则表达式。
strusts2课堂总结

一、1、struts2struts2是mvc设计思想的一个实现,可以将项目低耦合,提高扩展性2、struts2和struts1的区别struts2不是struts1的升级,而是继承的下xwork的血统,它吸收了struts1和webwork 的优势。
struts2的action是原型,安全的,struts2的action是单例,非安全3、步骤:1、导入包2、在web.xml文件中,加入struts2的核心拦截器3、在src下放入struts2的xml struts.xml4、urlhttp://localhost:8080/Struts2_01_HelloWorld/demo/hello.action二、1、默认值2、转发和重定向的区别转发:url显示的依然是上一个的url,共享上一次的请求重定向:url显示的是下一个的url,不共享3、urlhttp://localhost:8080/Struts2_02_Default/demo/hello.action4、路径http://localhost:8080/Struts2_02_Default/demo/a/b/c/hello.action1、原路径找不到,http://localhost:8080/Struts2_02_Default/demo/a/b/hello.action2、如果1找不到,http://localhost:8080/Struts2_02_Default/demo/a/hello.action3、如果2找不到,http://localhost:8080/Struts2_02_Default/demo/hello.action3、如果3找不到,http://localhost:8080/Struts2_02_Default/hello.action三、11、自定义action继承ActionSupport2、功能方法必须满足格式public String 名字()throws Exception{....};3、urlhttp://localhost:8080/Struts2_03_Action/demo/a.action四、1、如何给action传入参数注意:赋值的必须有封装的set方法,通过el表达式获取的时候,必须有封装的get 方法1、直接给单个参数赋值,在action里建立一个变量,名字与参数的名字一样2、为对象的某个属性赋值,在action里建立一个对象,将参数改为对象名.属性的格式五、1、转发和重定向的区别转发到下一次的时候,url依然是上一次的url,共享上一次的request重定向到下一次的时候,url是下一次的url,不共享上一次的request2、struts2的result的type转发:共享上一次action重定向:不共享上一次action1、转发到下一个jsp,html:dispatcher2、重定向到下一个jsp,html:redirect3、转发到下一个action:chain转到同一个包下的action转发到不同包下的action4、重定向到下一个action:redirectAction转到同一个包下的action转发到不同包下的action六、1、为了分模块开发,可以设置多个xmL文件。
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。
fastjson2 jsonpath 语法

fastjson2 jsonpath 语法
fastjson2的jsonpath语法与其他的JSONPath语法类似,它支持使用点(.)和方括号([])来访问JSON对象中的属性和数组元素。
以下是fastjson2的jsonpath语法的一些示例:
1. 使用点号获取属性:
- $.name:获取根对象的name属性的值
- $.address.street:获取根对象的address属性下的street属性的值
2. 使用方括号和索引获取数组元素:
- $[0]:获取数组的第一个元素
- $[1].name:获取数组的第二个元素的name属性的值
3. 使用通配符*匹配多个元素:
- $.employees[*].name:获取根对象的employees属性中所有元素的name属性的值
4. 使用过滤器进行条件筛选:
- $.employees[?(@.age > 30)].name:获取根对象的employees 属性中age大于30的元素的name属性的值
5. 使用逻辑运算符进行条件组合:
- $.employees[?(@.age > 30 && @.gender == "male")].name:获取根对象的employees属性中age大于30且gender为male
的元素的name属性的值
更多关于fastjson2的jsonpath语法的详细信息可以参考fastjson2的官方文档或者其他jsonpath的文档。
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,只要稍微修改就可以在项目中运用。
关于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中的一些属性的功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
STRUTS2对JSON的做了很好的封装。
基本上不需要对原始程序做太多修改即可变成JSON方式。
以下是一个例子。
首先是WEB程序。
function gotClick()
{
//请求的地址
var url = 'res.action';
//将form1表单域的值转换为请求参数
var params = Form.serialize('propForm');
//创建Ajax.Request对象,对应于发送请求
var myAjax = new Ajax.Request(
url,
{
//请求方式:POST
method:'post',
//请求参数
parameters:params,
//指定回调函数
onComplete: processResponse,
//是否异步发送请求
asynchronous:true
});
}
function processResponse(request)
{
console.log(request.responseText); ○1
var obj = JSON.parse(request.responseText); ○2
$("show").innerHTML = ; ○3
}
这段JS中,我们使用的是轻量级的prototype来实现AJAX,我们将FORM的数据提交给res.action。
对返回值的处理,
○1我们首先在控制台输出整个JSON字符串(FF有控制台,但IE没有),
○2然后用JSON2这个js包把JSON字符串转换为一个javascript对象,
○3并且输出其中一个属性的值。
接下来是配置文件,只用做很小改动就可以让返回值自动转换为JSON对象。
<package name="json"extends="json-default">○1
<action name="info"
class="mon.action.SysPropertyInfoAction"
method="infoJson">
<result name="success">/WEB-INF/jsp/json/info.jsp</result> </action>
<action name="res"
class="mon.action.SysPropertyInfoAction"
method="resJson">
<result type="json">○2
<param name="excludeProperties">○3
additionalInfo,additionalInfo2
</param>
</result>
</action>
</package>
○1注意这里要继承自json-default
○2返回值类型设置为JSON
○3需要注意的是,如果用JSON插件把返回结果定为JSON。
而JSON的原理是在ACTION中的
get方法都会序列化,所以前面是get的方法只要没指定不序列化,都会执行。
然而也许程序员希望有选择性的向浏览器端提供的数据。
STRUTS2提供了一些可用的办法,如例子中所示,我们把additionalInfo,additionalInfo2这两个对象设置为不返回给客户端,而其他对象不受影响。
我们也可以用includeProperties设置返回的对象,如下面这个例子
<param name="includeProperties">
person\[\d+\]\.person1
</param>
这个例子展示了更为强大的功能,STRUTS2允许用户对返回数据的限制粒度精确到对象中的某个属性,比如””,你甚至可以挥舞着正则表达式这种杀牛刀来搞定这个小问题。
最后是ACTION类,
private SysProperty prop = new SysProperty();
private String additionalInfo = " additional information";
private String additionalInfo2 = " additional information2";
public String infoJson(){
return SUCCESS;
}
public String resJson(){
System.out.println("prop : id="+prop.getId()+" ,
name="+prop.getName()+" , value="+prop.getValue()+" ,
desc="+prop.getDesc());
return SUCCESS;
}
public SysProperty getProp() {
return prop;
}
public void setProp(SysProperty prop) {
this.prop = prop;
}
//此处略去additionalInfo和additionalInfo2的get/set方法。
infoJson方法用来返回一个页面,因为在struts.xml配置文件中,我们配置了
<result name="success">/WEB-INF/jsp/json/info.jsp</result>
所以它返回了一个页面。
resJson没有配置SUCCESS,所以它只返回一个被序列化的JSON对象,并且不会导致页面跳转。
在struts.xml的配置中,提到了如何过滤返回给浏览器的数据。
同样的功能也可以在ACTION 中配置(但在配置文件中处理这个问题显得更灵活和漂亮,不是么)以下展示了JAVA注释的作用
JSON注释还支持如下几个域:
serialize:设置是否序列化该属性
deserialize:设置是否反序列化该属性。
format:设置用于格式化输出、解析日期表单域的格式。
例如"yyyy-MM-dd'T'HH:mm:ss"。
//使用注释语法来改变该属性序列化后的属性名
@JSON(name="newName")
public String getName()
{
return ;
}
需要引入 import com.googlecode.jsonplugin.annotations.JSON;
@JSON(serialize=false)
public User getUser() {
return er;
}
@JSON(format="yyyy-MM-dd")
public Date getStartDate() {
return this.startDate;
}。