struts2源碼系列(3)--攔截器

1.struts2攔截器介紹

接口:Interceptorapache

 void destroy();//攔截器銷燬時調用的方法app

void init();//攔截器實例化調用的方法spa

String intercept(ActionInvocation invocation) throws Exception;//action方法執行時攔截處理方法debug

2.struts2攔截器執行原理

2.1攔截器初始化流程

咱們都知道攔截器是配置到struts2.xml中的,多個攔截器造成了一個攔截器棧(struts有個默認的攔截器棧是配置到struts-default.xml中的)xml

2.2攔截器執行流程

通過一些類的解析最後生成一個DefaultActionInvocation,裏面有ActionProxy,攔截器鏈(一個迭代器)對象

DefaultActionInvocation-->invoke()繼承

循環迭代器,執行過濾器接口

2.3默認的鏈接器鏈執行過程

[exception] => [com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor]ip

主要是攔截異常,而後對異常進行處理,攔截到異常後,經過ActionConfig找到對應的異常處理ci

[alias] => [com.opensymphony.xwork2.interceptor.AliasInterceptor]

[servletConfig] => [org.apache.struts2.interceptor.ServletConfigInterceptor]

判斷Action類是否繼承了ServletRequestAware,ServletResponseAware,ParameterAware,ApplicationAware,SessionAware,RequestAware,PrincipalAware接口,注入相應的對象

[i18n] => [com.opensymphony.xwork2.interceptor.I18nInterceptor]

國際化相關的一些東西

[prepare] => [com.opensymphony.xwork2.interceptor.PrepareInterceptor]

Action是否實現了Preparable接口,提早執行接口的prepare()方法完成一些初始化準備

 [chain] => [com.opensymphony.xwork2.interceptor.ChainingInterceptor]

拷貝一些棧值

[scopedModelDriven] => [com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor]

Action是否實現了ScopedModelDriven接口,進行一些這個接口相關操做

[modelDriven] => [com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor]

Action是否實現了ModelDriven接口,調用getModel方法獲取多一個對象,放到堆棧的棧頂

[fileUpload] => [org.apache.struts2.interceptor.FileUploadInterceptor]

文件上傳攔截器,若是是文件上傳請求,將存儲到指定位置,並返回文件對象引用

[checkbox] => [org.apache.struts2.interceptor.CheckboxInterceptor]

處理上傳的參數是___checkbox__  主要用來處理複選框的

[datetime] => [org.apache.struts2.interceptor.DateTextFieldInterceptor]

日期時間攔截器,主要處理datetime組件

[multiselect] => [org.apache.struts2.interceptor.MultiselectInterceptor]

下拉框攔截器  __multiselect_

[staticParams] => [com.opensymphony.xwork2.interceptor.StaticParametersInterceptor]

靜態參數攔截器,Action若是實現了Parameterizable接口,將注入parameters參數,也就是ActionConfig中的params屬性,同時也會把params值放到對應的值棧中

[actionMappingParams] => [org.apache.struts2.interceptor.ActionMappingParametersInteceptor]

[params] => [com.opensymphony.xwork2.interceptor.ParametersInterceptor]

[conversionError] => [org.apache.struts2.interceptor.StrutsConversionErrorInterceptor]

處理參數轉換異常錯誤

[validation] => [org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor]

驗證攔截器,檢查要執行的action方法是否有SkipValidation註解,若是有,跳過驗證,不然驗證

[workflow] => [com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor]

ValidationAware

[debugging] => [org.apache.struts2.interceptor.debugging.DebuggingInterceptor]

[deprecation] => [org.apache.struts2.interceptor.DeprecationInterceptor]

相關文章
相關標籤/搜索