Struts2知识点四:拦截器Interceptor

本文深入解析Struts2的拦截器机制,包括自定义拦截器的创建、配置及应用,展示了如何通过拦截器控制Action执行流程,以及如何对特定方法进行拦截。

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

前言

拦截器是struts2中最重要的机制,动态的拦截action调用的对象昂,提供一种机制,可以使开发者定义action执行前后执行的代码。

拦截器的配置

定义TheIntercepter类,继承AbstractInterceptor抽象类,实现拦截方法,intercept, 可以执行一定的代码,在 invocation.invoke(); 前后,这个是action激活方法前后执行的代码。最后return result; 回到action中。

代码展示

1拦截器类定义代码:
package com.shengsiyuan.inerceptor;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class TheInterceptor2 extends AbstractInterceptor {

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		
		System.out.println("interceptor2 before...");
		

		
		
		String result = invocation.invoke();
		
		System.out.println("interceptor2 after...");
		
		return result;
	}

}

2struts2 拦截器注册代码

    	<interceptors>
    		<interceptor name="theInterceptor1" class="com.shengsiyuan.inerceptor.TheInterceptor1">
    			<param name="test">shengsiyuan</param>
    		</interceptor>
    		<interceptor name="theInterceptor2" class="com.shengsiyuan.inerceptor.TheInterceptor2"></interceptor>
    		<interceptor name="theInterceptor3" class="com.shengsiyuan.inerceptor.TheInterceptor3"></interceptor>
    	<!--  	<interceptor name="loginInterceptor" class="com.shengsiyuan.inerceptor.LoginInterceptor"></interceptor>
    	-->	
    		<interceptor-stack name="mydefaultInterceptorStack">
    			<!--<interceptor-ref name="loginInterceptor"></interceptor-ref>
    			--><interceptor-ref name="defaultStack"></interceptor-ref>
    		</interceptor-stack>
    		
    		
    	</interceptors>
    	

3拦截器在action中应用代码

       
        <action name="token" class="com.Test.Action.TokenAction">
        	<result name="success">/tokenSuccess.jsp</result>
        	<result name="invalid.token">/tokenFial.jsp</result>
        	
        	<interceptor-ref name="token"></interceptor-ref>
        	<interceptor-ref name="defaultStack"></interceptor-ref>
        </action>

struts2的机制中,就是依靠拦截器实现这些功能的,内置的拦截器构成了
拦截器栈也就是 defaultStack; 因此我们需要手动引入默认的拦截器栈。

拦截方法

除了对action进行拦截之外,我们还可以对方法进行拦截。

拦截器的定义,配置没有太多的不同,在action中定义拦截器时,有所区别
代码如下:

        <action name="action1" class="com.Test.Action.action1" method="myExecute">
        	<result name="success" type="chain">
        		<param name="usernameAndPassword">${usernameAndPassword}</param>
			</result>
			<interceptor-ref name="theInterceptor3">
				<param name="includeMethods">execute,myExecute</param>
				<param name="execludeMethods"></param>
			</interceptor-ref>
			<interceptor-ref name="defaultStack"></interceptor-ref>
        </action>

针对interceptor3我们设定其中的includeMethods 参数,里面放置了拦截的方法。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值