读书笔记:Struts2拦截器

本文介绍Struts2框架中的拦截器配置方法及使用技巧,包括基础类、配置方式、实现步骤,并展示了如何创建自定义拦截器及带有方法过滤特性的拦截器。

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

1、拦截器相关基础类

     Interceptor接口

           --> AbstractInterceptor抽象类

                --> MethodFilterInterceptor抽象类(支持方法过滤)



 

 

2、配置拦截器

     <interceptor name="拦截器名" class="拦截器实现类">

 

3、使用拦截器

     <interceptors>

          <interceptor name="mySimple" class="com.cjm.SimpleInterceptor"/>

     </interceptors>

 

     <action name="login" class="com.cjm.LoginAction">

          <result name="success">main.jsp</result>

 

          <interceptor-ref name="defaultStack"/>

          <interceptor-ref name="mySimple"/>

     </action>

 

     注意:一旦我们为Action显式指定了某个拦截器,则默认的拦截器就不再起作用,如果该Action需要使用默认拦截器,则必须手动配置该拦截器的引用。

 

4、实现拦截器类

public class SimpleInterceptor extends AbstractInterceptor{
	public String intercept(ActionInvocation invocation)throws Exception{
		//取得被拦截的Action实例
		LoginAction action = (LoginAction) invocation.getAction();
		
		//将控制权转给下一个拦截器,或者转给Action的execute方法
		String result = invocation.invoke();

		//返回逻辑视图名
		return result;
	}
}

 

5、带方法过滤特性的拦截器类

public class MyFilterInterceptor extends MethodFilterInterceptor{
	private String name;

	public void setName(String name){
		this.name = name;
	}

	public String doIntercept(ActionInvocation invocation)throws Exception{
		LoginAction action = (LoginAction) invocation.getAction();
		String result = invocation.invoke();
		return result;
	}
}
<interceptors>
	<interceptor name="myFilter" class="com.cjm.MyFilterInterceptor"/>
</interceptors>


<action name="login" class="com.cjm.LoginAction">
	<result name="success">main.jsp</result>

	<interceptor-ref name="defaultStack"/>
	<interceptor-ref name="myFilter">
		<param name="name">属性值</param>
		<param name="excludeMethods">execute,view,edit</param>
		<param name="includeMethods">add,list</param>
	</interceptor-ref>
 </action>

 注意:如果excludeMethods参数和includeMethods参数同时指定了一个方法名,则拦截器会拦截该方法。

 

6、覆盖拦截器中特定拦截器的参数

     语法: <拦截器名>.<参数名>

<interceptor-ref name="myFilter">
	<param name="mySimple.name">新属性值</param>
</interceptor-ref>

 

7、拦截器中设置的参数在Action类中读取

     在拦截器类中设置参数值:

valueStack.getContext().put("httpHelper", "参数值");

     在Action类中读取该参数值:

ActionContext.getContext().getValueStack().findValue("httpHelper")

 

8、拦截结果的监听器
     实现拦截结果的监听器必须实现PreResultListener接口,该监听器是通过手动注册在拦截器内部的。
     invocation.addPreResultListener(new MyPreResultListener());
     不要在PreResultListener监听器的beforeResult方法中通过ActionInvocation参数调用invoke方法。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值