【Struts2笔记整理八】拦截器

版权声明:本文为 小异常 原创文章,非商用自由转载-保持署名-注明出处,谢谢!
本文网址:https://blog.csdn.net/sun8112133/article/details/106698438







拦截器Struts2 中起到一个拦截 Action 的作用。它与我们之前在 Servlet 中学的过滤器还是有区别的,本篇博客就来给大家讲解 拦截器 的相关知识。


一、拦截器概述

拦截器(Interceptor),在 Struts2 中起到拦截 Action 的作用,它与 Filter 有很大的区别:

  • Filter: 过滤器,过滤从客户端向服务器发送的请求。
  • Interceptor: 拦截器,拦截的是客户端对 Action 的访问。它是更细粒度化的拦截。(可以拦截 Action 中的具体的方法)。

Filter 虽然也能简单的过滤 Action,但是没有办法实现更精细的拦截某个方法,而 Interceptor 它可以更加精细的拦截到某个方法,这就是它俩明显的区别。

Struts2 框架核心的功能都是依赖拦截器实现。



二、拦截器入门

1、创建拦截器类

编写一个类实现 Interceptor 接口或者继承 AbstractInterceptor 类即可创建一个 拦截器类。我们在这里给大家演示继承 AbstractInterceptor 类的方式。

public class InterceptorDemo1 extends AbstractInterceptor {
	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		System.out.println("InterceptorDemo1 执行了...");
		String s = invocation.invoke();
		System.out.println("InterceptorDemo1 结束了...");
		return s;
	}
}

2、对拦截器类进行配置

拦截器类 进行配置有两种方式:

1)定义拦截器进行配置

<package name="demo1" namespace="/" extends="struts-default">
	<!-- 定义拦截器 -->
	<interceptors>
		<interceptor name="interceptorDemo1" class="com.demo.web.interceptor.InterceptorDemo1" />
		<interceptor name="interceptorDemo2" class="com.demo.web.interceptor.InterceptorDemo2" />
	</interceptors>
	
	<action name="actionDemo1" class="com.demo.web.action.ActionDemo1">
		<result name="success">/demo1/demo1.jsp</result>
		
		<!-- 引入默认拦截器(一旦引入自定义拦截器,默认拦截器栈的拦截器就不执行了) -->
		<interceptor-ref name="defaultStack" />
		<!-- 引入自定义拦截器 -->
		<interceptor-ref name="interceptorDemo1" />
		<interceptor-ref name="interceptorDemo2" />
	</action>
</package>

2)定义一个拦截器栈的方式

<package name="demo1" namespace="/" extends="struts-default">
	<!-- 定义拦截器 -->
	<interceptors>
		<interceptor name="interceptorDemo1" class="com.demo.web.interceptor.InterceptorDemo1" />
		<interceptor name="interceptorDemo2" class="com.demo.web.interceptor.InterceptorDemo2" />
		
		<!-- 定义拦截器栈 -->
		<interceptor-stack name="myStack">
			<interceptor-ref name="defaultStack" />
			<interceptor-ref name="interceptorDemo1" />
			<interceptor-ref name="interceptorDemo2" />
		</interceptor-stack>
	</interceptors>
	
	<action name="actionDemo1" class="com.demo.web.action.ActionDemo1">
		<result name="success">/demo1/demo1.jsp</result>
		
		<!-- 引入拦截器栈 -->
		<interceptor-ref name="myStack" />
	</action>
</package>


博客中若有不恰当的地方,请您一定要告诉我。前路崎岖,望我们可以互相帮助,并肩前行!



猜你喜欢

转载自blog.csdn.net/sun8112133/article/details/106698438