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)定義一個攔截器棧的配置

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章