一、实验环境
1、struts2基本包
2、json-plugin
在struts2的lib下可以找到。
3、web.xml
加入struts2
<filter>
<filter-name>struts252</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts252</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
4、struts.xml
先测试一个普通的Action,确定struts正常工作了。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<!-- 开发模式(修改struts.xml不用重启服务器) -->
<constant name="struts.devMode" value="true" />
<!-- 动态action -->
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<package name="myPackage" namespace="/" extends="struts-default" >
<!-- 2.5 动态Action -->
<global-allowed-methods>regex:.*</global-allowed-methods>
<action name="jsonAction" class="com.xzw.json.action.JsonAction">
<result name="test1">index.jsp</result>
<result name="success">success.jsp</result>
</action>
</package>
</struts>
如果http://localhost:8080/struts2json/jsonAction和http://localhost:8080/struts2json/jsonAction!testJson1(testJson1是JsonAction内的一个方法能正确跳转到对应jsp,那么struts2已在工作。
二、xml方式测试。
1、配置文件
strut.xml有改变,继承的是json-default包,而json-default继承的是struts-default。这个定义在struts2-json-plugin-2.5.2.jar的struts-plugin.xml
返回类型是json。
2、Action
3、JSP/jQuery/Ajax
JSP的一个按钮
jQuery
4、结果
上面能正确输出结果。字符串内容和java对象都没有问题。需要注意,字符串与json对象之间的转换。或者说是,符合json语法的字符串转成JavaScript 对象(eval)。
三、注解方式。
1、导包
要使用注解,必须导入对应的包的
2、Action类
参照xml方式的设置。方法体与前面测试的一样。
3、测试方法
由于没有特别改变,测试只要把请求url改变就可以了。如果能和xml实验结果一致,则成功。
运行结果与预期一致。
四、优化JSON返回的结果。
如果一个Action中有多个get方法属性,那么上面得到实验会返回所有。然而,一般情况只需要部分的结果就可以了。
1、为Action增加属性
2、查看返回结果。
从这里发现,增加的get属性已经在response了。
3、不返回某些属性
使用参数excludeProperties
a.如,不需要myid;
b.使用正则表达式
去掉id结尾和list开头的。如下。
含有字符“s”的都不要。
4、只返回某些属性
使用参数includeProperties。
直接使用正则表达式作为例子。例如,只返回id结尾的。
5、注解上使用
在@Result里用上,形式如下。