摘要:自定義的攔截器可以和框架內置的攔截器進行混合使用,一般情況攔截器都被默認配置成為執行的基礎。若類型轉換失敗,或者數據驗證失敗,攔截器就會阻止的執行。
1.攔截器簡介
默認的攔截器在設計的時候就能滿足大部分的應用,所以很多時候就不需要添加自定義的攔截器或者修改攔截器棧。很多action有各種各樣的需求,比如輸入驗證、文件上傳、防止多次提交等等。于是struts框架就提供了一個解決方案,Interceptor策略。當你請求一個action時,在執行當前action之前,會執行攔截,執行完action之后會再次進行攔截。這個過程通稱為攔截器。
由于攔截器在action執行前后都會被執行,所以struts2的框架的核心功能大部分都作為攔截器進行實現,比如類型轉換、數據驗證等等,并且這些功能都是可插拔的,所以在使用時可以決定action使用哪些功能。自定義的攔截器可以和框架內置的攔截器進行混合使用,一般情況攔截器都被默認配置成為action執行的基礎。若類型轉換失敗,或者數據驗證失敗,攔截器就會阻止action的執行。
2.攔截器配置在大部分應用中,如果會多次使用同一系列的攔截器,可以將這些攔截器進行整理,聚合成Interceptor Stack。
login.jsp /secure/home
struts2框架默認的攔截器在struts2-core-2.3.24.1.jar包中的struts-default.xml中。
Interceptor | Name | Description |
---|---|---|
Alias Interceptor | alias | 允許參數在跨越多個請求時使用不同別名,這個攔截器可將多個action使用不同名字鏈接起來,然后用于處理同一信息 |
Chaining Interceptor | chain | 允許當前action能夠使用上一個被執行action的屬性,這個攔截器通常要和“chain”結果類型一起使用( |
Checkbox Interceptor | checkbox | 為沒有被選定的多選框增加一個值為false的參數,協助管理多選框(在HTTP請求里,那些沒有被選定的多選框通常是沒有任何信息的 |
Cookie Interceptor | cookie | 使用配置的name,value來指定cookies |
CookieProvider Interceptor | cookieProvider | 將cookies從action傳輸到response |
Conversion Error Interceptor | conversionError | 將轉換錯誤的信息(包括轉換的字符串和參數類型等)存放到action的字段錯誤集里去 |
Create Session Interceptor | createSession | 自動創建一個HttpSession會話(如果會話不存在),用來為需要使用到HttpSession的攔截器服務 |
DebuggingInterceptor | debugging | 當使用Struts2的開發模式時,此攔截器會提供更多的調試信息,為開發者提供幾種不同調試界面 |
DeprecationInterceptor | deprecation | 當devMode設置為on,會將所有未知或過時的設置打上log |
Execute and Wait Interceptor | execAndWait | 當action在后臺執行時,給用戶顯示一個過渡性的等待頁面 |
Exception Interceptor | exception | 將action拋出的異常映射到結果,這樣就通過重定向來自動處理異常,一般情況下,應該為最后一個攔截器 |
File Upload Interceptor | fileUpload | 此攔截器主要用于文件上傳,它負責解析表單中文件域的內容 |
I18n Interceptor | i18n | 這是支持國際化的攔截器,它負責把所選的語言、區域放入用戶Session中 |
Logger Interceptor | logger | 通過輸出被執行action的名字,提供簡單的日志功能,記錄用于追蹤的信息(可位于攔截器序列的不同位置) |
Message Store Interceptor | store | 在會話中為action存儲和檢索消息、字段錯誤以及action錯誤,該攔截器要求action實現ValidationAware接口 |
Model Driven Interceptor | modelDriven | 這是一個用于模型驅動的攔截器,當某個Action類實現了ModelDriven接口時,它負責把getModel()方法的結果放入ValueStack中 |
Scoped Model Driven Interceptor | scopedModelDriven | 如果一個Action實現了一個ScopedModelDriven接口,該攔截器負責從指定生存范圍中找出指定的Modol,并將通過setModel方法將該Model傳給Action實例 |
Parameters Interceptor | params | 這是最基本的一個攔截器,它負責解析HTTP請求中的參數,并將參數值設置成Action對應的屬性值 |
Prepare Interceptor | prepare | 如果action實現Preparable接口,將會調用該攔截器的prepare()方法 |
Scope Interceptor | scope | 這是范圍轉換攔截器,它可以將Action狀態信息保存到HttpSession范圍,或者保存到ServletContext范圍內。 |
Servlet Config Interceptor | servletConfig | 如果某個Action需要直接訪問ServletAPI,就是通過這個攔截器實現,它提供訪問HttpServletRequest和HttpServletResponse的方法,以map的方式訪問 |
Static Parameters Interceptor | staticParams | 設置action里的靜態定義值(通過action配置里的param標簽來實現);這個攔截器負責將struts.xml文件中 |
Roles Interceptor | roles | 這是一個JAAS(Java Authentication and Authorization Service,Java授權和認證服務)攔截器,只有當瀏覽者取得合適的授權后,才可以調用被該攔截器攔截的Action |
Timer Interceptor | timer | 以執行action所花時間的形式,簡單記錄action概要信息,此攔截器負責輸出Action的執行時間,可以利用此攔截器分析該Action的性能瓶頸 |
Token Interceptor | token | 以執行action所花時間的形式,簡單記錄action概要信息,此攔截器負責輸出Action的執行時間,可以利用此攔截器分析該Action的性能瓶頸 |
Token Session Interceptor | tokenSession | 和Token類似,但是遇到無效的token會將提交數據保存到session中 |
Validation Interceptor | validation | 通過執行在xxxAction-validation.xml中定義的校驗器,從而完成數據校驗。 |
Default Workflow Interceptor | workflow | 為action定義默認的工作流,一般跟在validation等其他攔截器后,當驗證失敗時,不執行action然后重定向到INPUT視圖 |
Parameter Filter | Interceptor | N/A 控制action對參數的訪問(非默認配置 |
Profiling Interceptor | profiling | 允許action記錄簡單的概要信息日志 |
Multiselect Interceptor | multiselect | 當一個select標簽設置成多選后(就是你寫的這種),沒有一個option被選中的時候,會自動設置一個空值 |
所有的攔截器都必須實現com.opensymphony.xwork2.interceptor.Interceptor這個接口,如下:
public interface Interceptor extends Serializable { void destroy(); void init(); String intercept(ActionInvocation invocation) throws Exception; }
struts2的每一個request會請求一個action,因此不用擔心線程安全問題,但是Interceptor會在多個request的中使用,所以必須要保證線程安全。
我們自定義的攔截器可以繼承 AbstractInterceptor抽象類, AbstractInterceptor提供了一個而空的init和destory方法,若沒有實現這兩個方法的需求,可以直接重寫intercept方法。
import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; public class SimpleInterceptor extends AbstractInterceptor { public String intercept(ActionInvocation invocation) throws Exception { MyAction action = (MyAction)invocation.getAction(); action.setDate(new Date()); return invocation.invoke(); } }
然后在struts2.xml文件中進行配置
...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65726.html
摘要:文件上傳通過這個攔截器攔截器的設計就是基于組件設計的應用再次回顧攔截器基礎在開始講解的時候已經說明過了這個文件,它定義了的所有攔截器。由于我們配置了自定義攔截器,那么默認的攔截器棧是不會執行的。 什么是攔截器 攔截器Interceptor.....攔截器是Struts的概念,它與過濾器是類似的...可以近似于看作是過濾器 為什么我們要使用攔截器 前面在介紹Struts的時候已經講解過了...
摘要:的入口是,而是這里要指出,和是不同的。以前認為是的一種特殊,這就導致了二者的機制不同,這里就牽涉到和的區別了。開發效率和性能高于。的實現機制有以自己的機制,用的是獨立的方式。 1、Struts2是類級別的攔截, 一個類對應一個request上下文,SpringMVC是方法級別的攔截,一個方法對應一個request上下文,而方法同時又跟一個url對應,所以說從架構本身上SpringMVC...
摘要:的開發流程在文件中定義核心攔截用戶請求。的最大作用是配置和請求之間的對應關系,并配置邏輯視圖名和物理視圖資源之間的相對關系,即返回結果和文件的物理位置的關系。實現為了使開發的更規范,提供了一個接口,定義了的處理應該實現的規范。 1.struts2的開發流程 在web.xml文件中定義核心Filter攔截用戶請求。 struts2 org.apa...
摘要:執行中的方法,默認執行方法返回結果同樣會通過一系列攔截器,然后由指定的表現形式返回,比如,或字面值配置文件利用配置文件初始化一系列的相關資源,這個底層實現技術屬于依賴注入。會通過配置文件初始化的資源包括攔截器,類及。 1.Struts2簡介 框架是一組程序的集合,包含了一系列的最佳實踐,作用是解決某個領域的問題。本質上來講,框架只是一個jar包,其本質上是對jdk的擴展。 最佳實踐:...
摘要:現在,我們使用了的話,那么框架內部就能幫我們封裝了。每個中都有和這樣的方法,沒必要的。我們抽取出來,通過配置文件來把這兩個方法替換掉,那么我們的程序就會更加優雅了。于是乎,就應運而生了。因此,學習的時候,不了解是沒有任何關系的。 前言 這是Strtus的開山篇,主要是引入struts框架...為什么要引入struts,引入struts的好處是什么,以及對Struts2一個簡單的入門.....
閱讀 2164·2021-11-11 16:55
閱讀 1685·2019-08-30 15:54
閱讀 2817·2019-08-30 15:53
閱讀 2211·2019-08-30 15:44
閱讀 1152·2019-08-30 15:43
閱讀 965·2019-08-30 11:22
閱讀 1942·2019-08-29 17:20
閱讀 1566·2019-08-29 16:56