知识梳理
1、Struts2 的控制器主要由三个层次组成,分别是过滤器、拦截器和业务控制 Action;
2、过滤器是 Struts2 控制器的最前端控制器,过滤器的使用需要在 web.xml
中进行配置;FilterDispatcher 是 Struts2 应用中必须配置使用的过滤器,该过滤器的主要功能 包括执行 Action、清空 ActionContext 对象等;
3、拦截器是 Struts2 中第二个层次的控制器,能够在 Action 执行前后完成一些通用功能;
4、Struts2 内建了大量拦截器, 这些拦截器以 name-class 对的形式配置在 strutsdefault.xml
文件中,如果 struts.xml 中定义的 package 继承了 Struts2 默 认的
struts-default` 包,便可以直接使用默认拦截器栈 defaultStack;
5、Struts2 也允许自定义拦截器,自定义拦截器类须实现 Interceptor 接口,并覆盖接 口中的 intercept 方法用于实现拦截器的主要功能;自定义拦截器须在 struts.xml
中进 行配置才能使用;
6、若在 struts.xml
中为 Action 指定了一个拦截器,则默认拦截器栈 defaultStack 将会失效,为了继续使用默认拦截器,必须将其进行显式地配置。
7、Struts API 中的 com.opensymphony.xwork2.util.ValueStack
称为值栈,值栈是一 个数据区域,该区域中保存了应用范围内的所有数据和 Action 处理的用户请求数据;
8、值栈被存储在 ActionContext 对象中,因此可以在任何节点访问其中的内容;
9、ValueStack 接口中主要方法有:Object findValue(String expr)
可以通过表达式查 找值栈中对应的值,void setValue(String expr, Object value)
用于将对象及其表达式 存到值栈中;
10、OGNL,即对象图导航语言,是 Struts 默认的表达式语言;
11、OGNL 基础单位称为导航链,基本的链由属性名、方法调用、数组或集合元素组成;
12、在 Struts2 中,值栈是 OGNL 上下文的根对象,可以直接访问,而 application、session 等其它对象不是根对象,需要使用#进行访问。
13、Struts2 应用中使用 Action 调用 Model,因此 Struts2 应用中的异常在 Model 层抛 出后,通常在 Action 类中进行处理;
14、Action 可以直接使用 try/catch 捕获异常,然后返回结果视图,跳转到相关页面处理 异常;
15、抛出异常后,也可以不在 Action 类中捕获,而使用 throws 声明异常,交给 Struts2 框架处理;
16、Struts2 允许通过 struts.xml
文件来配置异常的处理,使用 <exception-mapping>
标签声明异常映射,指定发生该类型异常时跳转的结果视图。
实验总结
1、自定义拦截器类的作用和实现方法
作用: Struts2第二个层次的控制器,能够在Action执行前后完成一些通用功能,完成一些通用的控制逻辑:解析请求参数、类型转换、输入校验、防止表单多次提交。
实现方法:
(1) 创建拦截器Interceptor
(2) 继承 AbstractInterceptor 类,重写 intercept()方法(AbstractInterceptor 类实现了 Interceptor 接口)
(3) Action 内使用拦截器
(4) 修改 struts.xml
文件,增加拦截器的配置
2、Interceptor 接口中 intercept(ActionInvocation inv)、init()和 destroy()方法的作用
-
intercept(ActionInvocation inv): 允许 Interceptor 在 ActionInvocation 对请求的其余处理之前和/或之后对请求进行某些 处理,或者使处理短路,并仅返回 String 数值
-
init(): 在 interceptor 生成后产生,但在 interceptor 接受任何请求之前调用,使得 interceptor 进行初始化
-
destroy(): 让 interceptor 清理它产生的资源
3、defaultStack 拦截器栈中包含的主要拦截功能
-
params:解析 HTTP 请求参数,并设置成 Action 属性
-
validation:执行 xxxAction-validate 中定义的校验器
-
workflow:调用 Action 中的 validate 方法
-
i18n:负责把用户所选的语言、区域放入用户 Session 中。
-
createSession:创建 HttpSession 对象
-
timer:负责输出 Action 执行时间,分析性能
-
autowiring:自动装配,访问 Spring 中的 Bean
4、自定义过滤器的实现方法和配置步骤,将拦截器与过滤器进行比较,并将两者的特点及区别
配置步骤:
(1) 创建拦截器类,继承Filter类,重写doFilter方法
(2) web.xml
文件配置
拦截器与过滤器特点和区别:
- 拦截器:Struts2 中第二个层次的控制器;允许自定义;需要在 web.xml 文件中配置;
- 过滤器:Struts2 控制器的最前端控制器;允许自定义;需要在 struts.xml 文件中配置。
5、ValueStack 接口及其主要方法的作用和开发步骤 ValueStack 接口中主要方法:findValue(), setValue()
findValue():通过以默认搜索顺序针对堆栈评估给定表达式来查找值。
setValue():使用默认搜索顺序使用给定的表达式在堆栈中的 bean 上设置属性。
开发需要引入 com.opensymphony.xwork2.util.ValueStack
并实例化 ValueStack 对象,之后通过方法调用实现相关功能。
6、OGNL 可访问的对象和基本语法
可以直接访问值栈 ValueStack(OGNL 上下文的根对象);Action 实例被保存在值栈中,因此可以直接访问。 基本语法包含#、%、$三种符号,作用见下文
7、OGNL 三种常用符号:#、%和$的作用和使用方法
%符号:计算 OGNL 表达式的值
$符号:在国际化资源文件中,引用 OGNL 表达式;在 Struts 2 框架配置文件中引用 OGNL 表达式
#符号:访问 OGNL 上下文和 Action 上下文;构造 Map;过滤和投影集合
8、自定义异常类的方法和步骤
(1)创建自定义异常类并继承 Exception 类
(2)在 Model 中抛出自定义异常
(3)在 Action 中捕获异常
(4)在 struts.xml
中设置异常页面导航
(5)在 Action 中抛出异常,将其交给框架处理
(6)在 struts.xml
中使用标签
9、整理 Struts2 框架处理异常的机制,整理 struts.xml
文件配置异常映射的方法以及相关标签的作用
Struts2 的异常处理机制是通过在 struts.xml
文件中配置<exception-mapping……/>元素完成,配置该元素时,需要指定两个属性:
exception:指定该异常类型的完全限定名。
result:指定逻辑视图名。
根据<exception-mapping…../>
元素出现位置的不同,异常映射又可分为两种:
局部异常映射:将<exception-mapping… />
元素作为<action…/>
元素的子元素配置;
全局异常映射:将<exception-mapping… />
元素作为<global-exception-mappings… />
元素的子元素配置;
全局异常映射对所有的 Action 都有效,但局部异常映射仅对该异常映射所在的 Action 有 效。如果局部异常映射和全局异常映射配置了同一个异常类型,在<action…./>
元素内的局部异常映射将覆盖全局异常映射。