Struts2笔记七---拦截器

本文介绍如何在Struts2框架中自定义拦截器,包括拦截器类的实现、配置以及如何在Action中使用自定义拦截器来计算执行时间。

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

1.自定义拦截器:
要有一个自定义的拦截器类,它需要实现Interceptor接口,里面有一个intercept方法。这个就是拦截器主要的实现方法。
intercept这个方法有一个参数ActionInvocation invocation,这里必须要在intercept方法中使用invocation调用invoke()方法。
在这个invoke()方法之前执行的代码就是Struts执行我们的Action之前执行的拦截内容,invoke()方法之后执行的代码就是执行完
我们的Action后再执行的拦截过程。具体如下:
public class MyInterceptor implements Interceptor {
	public void destroy() {
	}


	public void init() {
	}


	public String intercept(ActionInvocation invocation) throws Exception {
		long start = System.currentTimeMillis();
		String invoke = invocation.invoke();
		long end = System.currentTimeMillis();
		System.out.println("action time = " + (end - start));
		return invoke;
	}
}

以上拦截器是计算执行自定义Action的时间。
写好了拦截器类,下一步就需要在struts.xml中配上我的自定义拦截器了。
<package name="test" namespace="/" extends="struts-default">
	<interceptors><!-- 配一个拦截器名字叫my,这个拦截器的实现类是com.edifier.interceptor.MyInterceptor -->
		<interceptor name="my" class="com.edifier.interceptor.MyInterceptor"></interceptor>
	</interceptors>


	<action name="test" class="com.edifier.action.TestAction">
		<result>/test.jsp</result>
		<interceptor-ref name="defaultStack"></interceptor-ref><!-- 执行这个action会想执行struts默认的拦截器 -->
		<interceptor-ref name="my"></interceptor-ref><!-- 之后执行我们自定义的拦截器 -->
	</action>
</package>

这里的struts.xml还有一种写法

<package name="global-package" namespace="/" extends="struts-default">
	<interceptors><!-- 配一个拦截器名字叫my,这个拦截器的实现类是com.edifier.interceptor.MyInterceptor -->
		<interceptor name="my" class="com.edifier.interceptor.MyInterceptor"></interceptor>
		<interceptor-stack name="myInterceptor"><!-- 再自定义一个拦截器栈,这个拦截器栈会先执行我的自定义拦截器,然后再执行默认拦截器 -->
				<interceptor-ref name="my" />
				<interceptor-ref name="defaultStack" />
			</interceptor-stack>
	</interceptors>
</package>


<package name="test" namespace="/" extends="global-package">

	<action name="test" class="com.edifier.action.TestAction">
		<result>/test.jsp</result>
		<!-- 继承global-package包,在这个Action中加上自定义的拦截器栈,它就会先执行我的自定义拦截器,然后再执行默认拦截器 -->
		<interceptor-ref name="myInterceptor"></interceptor-ref>
	</action>
</package>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值