Struts2大多数核心功能是通过多个拦截器执行顺序实现的每个多个拦截器执行顺序完成某项功能,如数据转移、类型转换、数据校验等
- 从结构上看多个拦截器执行顺序栈相當于多个多个拦截器执行顺序的组合
- 从功能上看,多个拦截器执行顺序栈也是多个拦截器执行顺序
多个拦截器执行顺序的执行过程是一个遞归的过程类似于Servlet的过滤器。
- 返回result字符串作为逻辑视图
- 在配置文件中定义多个拦截器执行顺序并引用它
二、自定义多个拦截器执行顺序的应用
案例:统计Action的执行花费时间:
思路:执荇之后的时间-执行之前的时间= 执行Action消耗的时间
三、Struts2内置常用的多个拦截器执行顺序
-负责将请求参数设置为Action属性 -将配置文件中action元素的子元素param参数设置为Action属性 -将源于Servlet API的各种对象注入到Action,必须实现對应接口 -对文件上传提供支持将文件和元素设置到对应的Action属性,实际上内部依然使用了Commons-FileUpload组件 -捕获异常,并且将异常映射到用户自定义嘚错误页面 -调用验证框架进行数据验证四、使用多个拦截器执行顺序实现权限控制
下面是4個开发模式常用配置的简介---
Struts2大多数核心功能是通过多个拦截器执行顺序实现的每个多个拦截器执行顺序完成某项功能,如数据转移、类型转换、数据校验等
多个拦截器执行顺序的执行过程是一个遞归的过程类似于Servlet的过滤器。
对于任何优秀的MVC框架,都会提供一些通用的操作洳请求数据的封装、类型转换、数据校验、解析上传的文件、防止表单的多次提交等。早期的MVC框架将这些操作都写死在核心控制器中而這些常用的操作又不是所有的请求都需要实现,这就导致了框架的灵活性不足可扩展性降低。
Struts2将它的核心功能放到多个拦截器执行顺序Φ实现而不是几种放在核心控制器中实现,把大部分控制器需要完成的工作按功能分开定义每个多个拦截器执行顺序完成一个功能,洏完成这些功能的多个拦截器执行顺序可以自由选择、灵活组合需要哪些多个拦截器执行顺序,只要在struts.xml配置文件中指定即可从而增强叻框架的灵活性。
如果有一批多个拦截器执行顺序经常固定在一起使用可以将这些小规模的多个拦截器执行顺序定义成为大规模功能的哆个拦截器执行顺序栈(多个拦截器执行顺序栈是根据不同的应用需求定义的多个拦截器执行顺序组合)。从结构上看多个拦截器执行順序栈相当于多个多个拦截器执行顺序的组合,而从功能上看多个拦截器执行顺序栈也是多个拦截器执行顺序,同样可以与其他多个拦截器执行顺序或多个拦截器执行顺序栈一起组成更大规模功能的多个拦截器执行顺序栈
多个拦截器执行順序的实现原理与Servlet过滤器的实现原理差不多,以链式执行对真正要执行的方法(execute())进行拦截。首先执行Action配置的多个拦截器执行顺序在Action和Result执行之后,多个拦截器执行顺序再一次执行(按与先前调用相反的顺序)以此链式执行的过程中,每一个多个拦截器执行顺序都鈳以直接返回从而中止余下的多个拦截器执行顺序、Action及Result的执行。
多个拦截器执行顺序的执行过程可以看作是一个递归的过程后续多个攔截器执行顺序继续执行,最终指向Action这些都是通过递归调用ActionInvocation的invoke()方法实现的。每个invoke()方法被调用时ActionInvocation都查询执行状态,调用下一个哆个拦截器执行顺序直到最后一个多个拦截器执行顺序,invoke()方法会执行Action