JAVA框架——struts2(四)拦截器的配置,以及自定义拦截器

一、 拦截器概述

在AOP中用于某个方法或字段被访问之前,进行拦截然后再之前或之后加入某些操作。拦截是AOP的一种实现策略

二、 自定义拦截器——拦截器的创建

其拥有三种方式进行创建

方式一:实现Interceptor接口

//拦截器: 第一种创建方式
//拦截器生命周期: 随项目的启动而创建,随项目关闭而销毁
public class MyInterceptor implements Interceptor{}

方式二:继承AbstractInterceptor

只需要实现intercept方法即可

//拦截器: 第二种创建方式
//帮我们空实现了init和destroy方法,
public class MyInterceptor2 extends AbstractInterceptor{
@Override
	public String intercept(ActionInvocation arg0) throws Exception {	
		return null;
	}
}

方式三:继承MethodFilterInterceptor

其需要定制哪些方法需要拦截,哪些方法不需要拦截

//拦截器: 第三种创建方式
//继承MethodFilterInterceptor
//功能定制拦截器拦截方法。
//定制哪些方法,intercept
//需要拦截。调用doIntercept方法
//定制哪些方法不需要拦截
public class MyInterceptor3 extends MethodFilterInterceptor{

	@Override
	protected String doIntercept(ActionInvocation invocation) throws Exception {
		//前处理
		System.out.println("MyInterceptor前处理");
		//如何进行放行
		invocation.invoke();
		//后处理
		System.out.println("MyInterceptor后处理");
		return null;
	}
}

方式三推荐,其中invocation.invoke为放行,如果不放行,直接跳转到一个结果页面,如:success页面或者error页面。不执行后续的拦截器以及Action,直接交给Result处理结果,进行页面跳转

三、 自定义拦截器——拦截器配置

1. 拦截器的配置

在struts.xml文件中完成的如下:

<interceptor name="myInterceptor" class="MyInterceptor3">
			<param name="paramName">paramValue</param>
</interceptor>

上述语法中,name属性用来指定拦截器的名称,class属性用于指定拦截器的实现类,有时,在定义拦截器时需要传入参数,这时需要使用标签,其中name属性用来指定参数的名称,paramValue表示参数的值

2. 拦截器栈

在实际开发中,经常需要在Action执行前同时执行多个拦截动作。这时可以把多个拦截器组成一个拦截器栈。在使用时,可以将栈内多个拦截器当作一个整体来引用。当拦截器被附加到一个Action上时,在执行Action之前必须先执行拦截器栈中的每一个拦截器
如下:

<interceptors>
		<interceptor name="myInterceptor" class="MyInterceptor3"></interceptor>
	<!-- 注册拦截器栈 -->
		<interceptor-stack name="mystack">
			<!-- 自定义拦截器引入 -->
			<!-- 引入默认的拦截器栈(20)个 -->
			<interceptor-ref name="defaultStack"></interceptor-ref>
		</interceptor-stack>
	</interceptors>

3. 在指定保重设置默认拦截器/为Action单独指定哪个拦截器

<!-- 指定默认拦截器的栈 -->
		<default-interceptor-ref name="mystack"></default-interceptor-ref>
		<action name="Demo1Action_*" class="com.aiit.interceptor.Demo1Action" method="{1}" >
			<!-- 为Action单独指定走哪个拦截器 -->
			<!-- <default-interceptor-ref name="mystack"></default-interceptor-ref> -->
			<result name="success" type="dispatcher" >/index.jsp</result>
		</action>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值