拦截器其实是数据验证的一种封装衍生,首先我们先讲一下为什么要进行数据验证?

·对数据的合法性进行检查,只允许合法的数据进入应用程序

在哪里实现数据验证

·客户端验证

数据提交前在客户端验证

可使用JavaScript或JQuery实现

特点:1.减少客户的等待时间;2.减小服务器压力

·服务器端验证

在数据提交后服务器端验证

特点:1.防止“绕过”客户端验证提交非法数据;2.可以在服务器端处理数据前确保数据的合法性

那么对于struts2来说,它有两种方式实验服务器端验证:

·使用ActionSupport编码实现验证

·使用验证框架实现验证

ActionSupport编码实现验证

使用ActionSupport实现验证

在Action类的业务方法中直接验证——方法

重写validate()方法——action

使用validateXxx()方法——方法(常用)

添加错误信息

addFieldError(String fieldName,String errorMessage)

addActionError(String anErrorMessage)

在页面输出验证结果

<s:fielderror/>输出一个或所有字段

<s:actionerror/>输出所有Action的错误信息

<action>的配置

<result name=”input”>x.jsp</result>

在validate()方法中实现验证

重写ActionSupport类的vaildate()方法

在vaildate()方法中实现验证

将数据验证和业务处理分离

添加与显示错误信息的方式不变

小经验

接收参数时,数据转换失败也会调用validate()方法

vaildate()方法验证不通过,不会执行业务方法

验证框架

验证实现的部分方便复用、扩展

验证的实现与业务处理分离

使用验证框架的过程

编写jsp数据输入页面

编写action类极其配置文件

在action类同目录下创建验证文件ActionName-validation。xml

编写验证规则

ActionName-validation.xml对action类中所有业务方法生效

如果想对某一业务方法配置验证规则怎么做?

解决方法

对action类中的某一业务方法单独编写<action>配置并使用method属性指定该业务方法

提供actionName-alias-validation.xml文件进行验证

验证规则的编写不变

验证框架

ActionName-validation.xml可对Action类中所有业务方法起作用

ActionName-alias-validation.xml可对Action类中某一业务方法起作用

验证顺序

Action父类-validation.xml

Action父类-alias-validation.xml

Action类-validation.xml

Action类-alias-validation.xml

拦截器

拦截器也是一个类

拦截器可以在Action被调用之前和之后执行代码

框架的很多核心功能是拦截器实现的

拦截器特点

拦截器自由组合,增强了灵活性、扩展性、有利于系统解耦

拦截器可以拦截Action请求

在访问的Action执行之前和执行之后执行代码实现某项功能

Struts2:

大部分功能是在拦截器中实现的

如:接收输入的参数、数据验证、文件上传、国际化等

应用程序:

需要在Action执行的前后执行特定功能时

Action执行时间统计,action访问权限管理

Action添加功能

action的代码不懂,使用拦截器实现功能

拦截器工作方式

拦截器的执行过程是一个递归的过程

做一些Action执行前的预处理

将控制交给后续拦截器或返回结果字符串

做一些Action执行后的处理