- 说明:Struts2+rest插件中, 使用自定义拦截器。
- Rest注解:
@Namespace(Action命名空间注解):配置在action类上
@ParentPackage(父包注解):配置在action类上,指定action所在包的父包
@Action(action注解) : 注解方式指定action配置
@DefaultInterceptorRef(默认拦截器注解):配置在action类上
@InterceptorRefs(使用多个拦截器注解):配置在action类上
@InterceptorRef(使用单个拦截器注解):配置在action类上,使用单个拦截器
@ResultPath(视图路径注解):配置在acton类上,用于指定location
@Results(视图结果集注解):配置在action类上,用于构建ResultConfig
@ExceptionMappings(异常注解):配置在acton类上,用于处理异常的
- Action类
/*配置Results结果集,返回字符串为"success"的所有Result的配置。
* 类似于在struts.xml中配置:
*<action name="movies" class="com.bs.action.MoviesController" method="update">
*<result name="success" type="redirectAction">
<param name="actionName">movies</param>
</result>
</action>
属性重定向另一个action:
未指定location则根据配置:<param name="statusCode">303</param>
拼接成location=/应用名/actionName?statusCode=303
*/
//@Results是一个数组注解,可以配置多个@Result
@Results(value=@Result(name="success", type="redirectAction", params = {"actionName" , "movies"}))
@InterceptorRefs(value={@InterceptorRef("paramConvert"),@InterceptorRef("restDefaultStack")})
public class MoviesController extends ActionSupport implements ModelDriven<Object> {
......
}
Tips: 有意思,这个配置写博客上非代码区,还要我自己转义"<" 改成“< ;”
- struts.xml配置
@author:拈花为何不一笑
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- struts2常量bean配置 -->
<constant name="struts.devMode" value="true" />
<constant name="struts.i18n.encoding" value="UTF-8" />
<!-- Restful相关常量Bean配置 -->
<constant name="struts.convention.action.suffix" value="Controller" />
<constant name="struts.convention.action.mapAllMatches" value="true" />
<!-- 拦截器扩展,扩展rest插件中的拦截器供消费人员使用,需要设置一个配置即可:
1.把"rest-default"改成 我写的:"interceptorext"
<constant name=struts.convention.default.parent.package" value="interceptorext" />
2.然后在Action类上使用拦截器注解:
//@InterceptorRefs(value={@InterceptorRef("paramConvert"),@InterceptorRef("restDefaultStack")})
-->
<constant name="struts.convention.default.parent.package" value="interceptorext" />
<package name="interceptorext" extends="rest-default">
<!-- 自定义拦截器 -->
<interceptors>
<interceptor name="paramConvert" class="com.bs.interceptor.ParamConvertInterceptor"></interceptor>
</interceptors>
<!-- 使用的拦截器,必须是action所在package或parentPack包中定义的,别的包中的是访问不到的! -->
<!-- 在哪里使用拦截器?action中使用拦截器
action在哪?rest风格是通过java代码构建action而不是直接通过xml来配置,rest风格根据两点来确定那些类可以作为Action
第一点:扫描以action,actions,struts,struts2结尾的类路径下包名下的类
第二点:扫描到的包中类以struts.convention.action.suffix指定的值结尾的类
此应用中MoviesController为Action类。
-->
</package>
</struts>
- 后面还有几集不续写了………