Struts2的拦截器,Struts2的执行流程,图解+详解(底层代码)以及 自定义拦截器(配置和使用)

一、拦截器的概述

1、什么是拦截器

Interceptor:拦截器,起到的是拦截Action的作用

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

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

2、Struts2的执行流程

官方Struts2执行流程图
在这里插入图片描述
官方图的原码详解
客户端向服务器发送一个Action的请求,执行核心过滤器(doFilter)方法。
在这个方法当中,调用executeAction()方法,
在这个方法内部调用的是disoatcher.serviceAction();
在这个方法的内部创建了一个Action的代理,
最终执行的是Action的代理当中execute();
在这个代理中执行execute()方法中调用ActionInvocation的invoke方法。
在这个方法的内部递归执行一组拦截器(完成部分功能),
如果没有下一个拦截器,就会执行目标Action,
根据Action返回的结果来进行页面的跳转。

在这里插入图片描述

二、自定义拦截器:

1、搭建Struts2的环境

web.xml
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、编写拦截器的类

编写一个类实现interceptor接口或者继承AbstractInterceptor类。

(1)自定义拦截器一:继承AbstractInterceptor

编写两个拦截器

/*
 * 自定义拦截器一
 */
public class InterceptorDemo1 extends AbstractInterceptor {
	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("InterceptorDemo1执行了。。。。。");
		String obj = invocation.invoke();
		System.out.println("InterceptorDemo1执行结束了");
		return obj;
	}
}
/*
 * 自定义拦截器一
 */
public class InterceptorDemo2 extends AbstractInterceptor {
	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("InterceptorDemo2执行了。。。。。");
		String obj = invocation.invoke();
		System.out.println("InterceptorDemo2执行结束了");
		return obj;
	}
}

3、对拦截器进行配置

(1)定义拦截器进行配置

在这里插入图片描述
引入拦截器(一旦引入自定义拦截器,以下默认拦截器栈的拦截器就不执行了,所以需要手动设置默认的拦截器)
在这里插入图片描述
测试
在这里插入图片描述
结果及执行顺序
在这里插入图片描述

(2)定义一个拦截器栈的配置

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44757034/article/details/106957526