常用拦截器的执行步骤
来源:互联网 发布:生存之民工 知乎 编辑:程序博客网 时间:2024/05/16 14:31
一.总结
- 常用拦截器的执行步骤
- 登录中的拦截器执行过程
- 首先执行默认拦截器DefaultActionInvocation
- 首先执行其中的init方法
- 该方法创建Action,并将Action压入栈顶
- 首先执行其中的init方法
- 然后执行模型驱动拦截器ModelDrivenInterceptor
- 首先执行其中的intercept方法
- 该方法中获取模型驱动,并将模型压入栈顶
- 然后继续执行默认拦截器DefaultActionInvocation
- 执行该拦截器中的invoke方法
- 首先执行其中的intercept方法
- 然后执行赋值拦截器ParametersInterceptor
- 首先执行其中的doIntercept方法
- 该方法中获取request请求中的parameterMap中的请求数据。
- 然后调用setParameters(final Object action, ValueStack stack, final Map<String, Object> parameters)方法
- 在该方法中为Action中的属性赋值。
- 首先执行其中的doIntercept方法
- 首先执行默认拦截器DefaultActionInvocation
- 保存功能,拦截器的执行过程。
- 首先执行默认拦截器DefaultActionInvocation
- 执行其中的init方法,创建action并压入栈顶
- 然后执行ModelDrivenInterceptor
- 走了两次
- 一次是执行拦截器:actionMappingParams, Action映射赋值
- 一次是执行拦截器:Params,属性赋值
- 走了两次
- 执行ParametersInterceptor
- 此时parameters中无数据
- 再执行DefaultActionInvocation
- 再执行ParametersInterceptor
- 此时parameters中有页面传过来的数据
- 首先执行默认拦截器DefaultActionInvocation
- 总结:
- 实现模型驱动接口的Action,struts赋值执行流程
- 首先执行DefaultActionInvocation<com.opensymphony.xwork2.DefaultActionInvocation>判断要执行的拦截器,在该拦截器的init初始化方法中将请求的Action压入stack栈顶,然后执行invoke方法调用不同的拦截器
- 当DeafaultActionInvocation中invoke方法要执行modelDrive拦截器的时候,调用ModelDriven<com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor>拦截器。ModelDriven拦截器只负责将Model模型压入栈顶,也就是说此时action中的模型已经在栈中在ModelDriven压入的模型的下面。
- 当DeafaultActionInvocation中invoke方法要执行ActionMapping拦截器的时候,调用ParametersInterceptor<com.opensymphony.xwork2.interceptor.ParametersInterceptor>拦截器进行映射关系赋值。此时页面提交过来的parameters为空。
- 当DeafaultActionInvocation中invoke方法要执行params拦截器的时候,调用ParametersInterceptor拦截器进行Action属性赋值,此时页面提交过来的parameters有数据。
- 由于stack栈顶是ModelDriven拦截器压入的模型,所以赋值以该模型为先。就是说如果ModelDriven压入栈中的模型中如果存在与Action中属性名重名的属性,struts2的params拦截器会以ModelDriven压入栈的模型为先赋值、赋值结束后不会再对Action中同名属性进行赋值。如果ModelDriven压入栈的模型因为数据类型或者其他的原因赋值失败了,需要注意的是params拦截器也会终止为该属性继续赋值。
- Struts2拦截器赋值需要注意两点:
- 赋值时按照对象名称进行检索
- 赋值的时候对象在栈中的先后顺序决定了该对象是否会被赋值。
- 这个知识点是由于页面中的表单数据无法为目标Action中的属性赋值引起的?
- 原因就是因为模型驱动中提供了与Action中同名的属性来源: http://blog.csdn.net/ranmudaofa/article/details/41996275
- 原因就是因为模型驱动中提供了与Action中同名的属性
- 实现模型驱动接口的Action,struts赋值执行流程
0 0
- 常用拦截器的执行步骤
- 自定义拦截器的步骤
- 拦截器的执行顺序
- 拦截器的执行顺序
- 拦截器的执行顺序
- stuts2拦截器的一般应用步骤
- struts2的常用拦截器-----
- struts2的拦截器(6):拦截器的执行顺序
- 拦截器使用步骤
- mybatis拦截器的执行顺序
- Action 与 拦截器执行的顺序
- mybatis拦截器的执行顺序
- 【Struts】拦截器的执行流程
- struts2的执行原理(执行流程,过滤器和拦截器)
- 拦截器执行顺序
- 执行等待拦截器
- 常用的struts2的Interceptor拦截器
- struts2常用的预定义拦截器
- 使用Spring Session做分布式会话管理
- 跟QQ类似的本地相册多选功能,并在列表中提示已选图片数量
- 使用Android Studio阅读整个Android源码
- linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解
- mysql 触发器 trigger 中断操作 抛出异常
- 常用拦截器的执行步骤
- caffe学习(11)python的数据可视化
- Assertion failure in -[UICollectionViewData validateLayoutInRect:],
- Kero---knockout
- Android 修复ijkPlayer进行m3u8 hls流播放时seek进度条拖动不准确的问题
- JDBC
- Javaweb-------mybatis+springmvc关于实体类使用注解的一个问题
- Flex布局
- [noip测试]分解数(线性筛+乱搞)