"这份文件是关于Struts2.0框架中输入校验流程的教学内容,主要讲解了Struts2的输入验证机制和Struts1的架构原理。"
在Struts2.0框架中,输入校验是一个关键的步骤,确保用户提交的数据符合预期格式和规则,防止非法数据进入系统。以下是输入校验的具体流程:
1. **类型转换**:当用户提交表单数据后,Struts2的类型转换器会介入,尝试将请求参数转化为Action类中相应属性的类型。例如,如果表单字段是日期,转换器会尝试将其转换为日期对象。
2. **异常处理**:在类型转换过程中,如果出现异常(如无法将字符串转换为整数),该异常会被保存到ActionContext中,随后conversionError拦截器会将这个异常信息添加到fieldErrors集合中。即使没有出现异常,系统也会继续进行下一步。
3. **自定义验证**:接下来,Struts2会通过反射机制,调用Action类中以`validateXxx()`命名的方法,这里的`Xxx`对应字段名。这些方法允许开发者针对特定字段进行定制化的验证。
4. **全局验证**:在执行完所有自定义验证方法后,Struts2会调用Action类中的`validate()`方法,这是一个全局验证方法,可以检查整个Action对象的多个字段。
5. **错误处理与视图转向**:如果fieldErrors集合中存在错误信息,表示验证未通过,Struts2会自动将请求转发到名为`input`的视图,通常是一个错误提示页面。反之,如果没有错误,系统则会执行Action中的业务处理方法,并可能转向结果页面。
对比Struts1.0,Struts2提供了更灵活的架构和改进的输入验证机制。在Struts1中,开发流程包括使用ActionForm来封装页面提交的数据,通过Struts-config.xml配置文件映射Action,然后由ActionServlet控制器查找并调用相应的Action。ActionForm和Action是Struts1的核心组件,配置文件中需要定义它们以及转发的JSP页面。
Struts1.0的主要缺点在于其表现层技术单一,仅支持JSP,不支持FreeMarker、Velocity等现代模板引擎,且与Servlet API耦合度高,这使得测试和维护变得困难。此外,由于依赖ServletAPI,Struts1的业务逻辑控制器内部充斥着大量Servlet相关的代码,这限制了其可移植性和可测试性。
Struts2在输入校验和整体架构上相比Struts1有显著提升,提供了更强大、更灵活的验证机制,同时也降低了与底层API的耦合,使得测试和维护更加方便。