struts2源码系列(3)--拦截器

1.struts2拦截器介绍

接口:Interceptor

 void destroy();//拦截器销毁时调用的方法

void init();//拦截器实例化调用的方法

String intercept(ActionInvocation invocation) throws Exception;//action方法执行时拦截处理方法

2.struts2拦截器执行原理

2.1拦截器初始化流程

我们都知道拦截器是配置到struts2.xml中的,多个拦截器形成了一个拦截器栈(struts有个默认的拦截器栈是配置到struts-default.xml中的)

2.2拦截器执行流程

经过一些类的解析最后生成一个DefaultActionInvocation,里面有ActionProxy,拦截器链(一个迭代器)

DefaultActionInvocation-->invoke()

循环迭代器,执行过滤器

2.3默认的连接器链执行过程

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

主要是拦截异常,然后对异常进行处理,拦截到异常后,通过ActionConfig找到对应的异常处理

[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]

 

转载于:https://my.oschina.net/yibuliushen/blog/738316

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值