Struts2 验证机制详解:xml配置与Action validate() 方法
5星 · 超过95%的资源 需积分: 10 30 浏览量
更新于2024-09-15
收藏 50KB DOCX 举报
"本文主要介绍了Struts2框架中的两种验证方式:验证器(基于XML配置)和Action类中的validate()方法。这两种验证方法都是为了确保数据的正确性,防止非法数据进入系统。"
在Struts2框架中,数据验证是非常重要的一步,它可以确保用户提交的数据符合系统的预期规则。Struts2提供了两种验证方式,一种是通过验证器(Validator),需要在XML配置文件中定义验证规则;另一种是直接在Action类中实现validate()方法进行验证。
首先,让我们来了解验证框架的工作流程:
1. 当用户发送请求时,请求参数会被Struts2的params拦截器捕获,并将这些参数值放入ValueStack。但请注意,这些参数此时并未直接赋值给Action类的成员变量。
2. 如果使用了验证器,验证器会检查ValueStack中的参数是否满足XML配置文件中设定的验证规则。如果验证失败,验证器会生成相应的错误信息。
3. 接着,请求会到达workflow拦截器,该拦截器会调用Action类中的validate()方法进行额外的验证。如果这个方法内验证失败,同样会产生错误信息。
4. workflow拦截器会检查ValidationAware接口的实现(ActionSupport类已经实现了此接口),通过hasErrors()方法判断是否有错误信息。只要有错误,workflow拦截器会阻止请求继续执行,而是将控制权返回给输入页面,显示错误信息给用户。
5. 如果所有验证都通过,workflow拦截器则会允许请求继续,执行Action的业务逻辑。
下面是一个简单的例子,展示了如何在Action类中使用validate()方法:
```java
package cn.itcast.Action;
import java.util.regex.Pattern;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class PersonAction extends ActionSupport {
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
private String username;
private String mobile;
// validate()方法用于验证数据
@Override
public void validate() {
// 检查用户名是否为空
if (username == null || username.trim().isEmpty()) {
addFieldError("username", "用户名不能为空");
}
// 正则表达式验证手机号码
Pattern pattern = Pattern.compile("^1[3-9]\\d{9}$");
if (!pattern.matcher(mobile).matches()) {
addFieldError("mobile", "手机号码格式不正确");
}
}
public String updata() {
// 如果验证通过,执行业务逻辑
ActionContext.getContext().put("message", "更新成功");
return "success";
}
}
```
在这个例子中,我们定义了PersonAction类,并重写了validate()方法。在这里,我们对username和mobile两个字段进行了验证。如果username为空或mobile不符合手机号码的格式,validate()方法会添加错误信息到字段,并在后续的流程中被workflow拦截器检测到,从而阻止执行updata()方法。
总结来说,Struts2的验证机制是为了确保数据的准确性和安全性,通过验证器或Action中的validate()方法,我们可以自定义数据验证规则,有效地防止了非法数据的输入,提高了系统的稳定性和用户体验。同时,通过合理的错误处理,用户能够清晰地了解到数据输入的问题,方便他们进行修正。
2013-04-07 上传
2022-09-21 上传
2022-09-24 上传
2014-04-10 上传
2009-04-09 上传
2019-04-17 上传
2012-11-27 上传
2012-12-24 上传
_Fighter
- 粉丝: 26
- 资源: 60
最新资源
- 平尾装配工作平台运输支撑系统设计与应用
- MAX-MIN Ant System:用MATLAB解决旅行商问题
- Flutter状态管理新秀:sealed_flutter_bloc包整合seal_unions
- Pong²开源游戏:双人对战图形化的经典竞技体验
- jQuery spriteAnimator插件:创建精灵动画的利器
- 广播媒体对象传输方法与设备的技术分析
- MATLAB HDF5数据提取工具:深层结构化数据处理
- 适用于arm64的Valgrind交叉编译包发布
- 基于canvas和Java后端的小程序“飞翔的小鸟”完整示例
- 全面升级STM32F7 Discovery LCD BSP驱动程序
- React Router v4 入门教程与示例代码解析
- 下载OpenCV各版本安装包,全面覆盖2.4至4.5
- 手写笔画分割技术的新突破:智能分割方法与装置
- 基于Koplowitz & Bruckstein算法的MATLAB周长估计方法
- Modbus4j-3.0.3版本免费下载指南
- PoqetPresenter:Sharp Zaurus上的开源OpenOffice演示查看器