rest插件实现restful风格第2集(Struts2)

本文介绍了如何在Struts2中结合REST插件使用自定义拦截器,详细讲解了Rest注解的应用,Action类的设计以及struts.xml的配置方法。作者:拈花为何不一笑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 说明:Struts2+rest插件中, 使用自定义拦截器。
  2. Rest注解:
		@Namespace(Action命名空间注解):配置在action类上
		@ParentPackage(父包注解):配置在action类上,指定action所在包的父包
		@Action(action注解) : 注解方式指定action配置
		@DefaultInterceptorRef(默认拦截器注解):配置在action类上
		@InterceptorRefs(使用多个拦截器注解):配置在action类上
		@InterceptorRef(使用单个拦截器注解):配置在action类上,使用单个拦截器
		@ResultPath(视图路径注解):配置在acton类上,用于指定location
		@Results(视图结果集注解):配置在action类上,用于构建ResultConfig
		@ExceptionMappings(异常注解):配置在acton类上,用于处理异常的
  1. 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: 有意思,这个配置写博客上非代码区,还要我自己转义"<" 改成“&lt ;”
  1. 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>

  1. 后面还有几集不续写了………
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值