Struts2 验证机制详解:xml配置与Action validate() 方法

5星 · 超过95%的资源 需积分: 10 8 下载量 178 浏览量 更新于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()方法,我们可以自定义数据验证规则,有效地防止了非法数据的输入,提高了系统的稳定性和用户体验。同时,通过合理的错误处理,用户能够清晰地了解到数据输入的问题,方便他们进行修正。