Struts2是一个基于MVC设计模式的Web应用框架,它起源于WebWork2,并在其基础上进行了一系列改进。WebWork的核心是XWork框架,它采用命令模式,帮助开发者专注于业务逻辑而不是繁琐的Servlet编程。Struts2保留了WebWork的精髓,并在配置、可测试性、输入处理和表达式语言等方面进行了优化。
在配置方面,Struts2不再局限于单一的`webwork.properties`文件,而是引入了多个配置文件,如`struts-default.xml`、`struts-plugin.xml`、`struts.xml`以及可选的`struts.properties`。这使得配置更加灵活,可以根据项目需求进行定制。此外,Struts2的配置文件还支持通配符,增强了配置的可扩展性。
Struts1和Struts2在Action类的设计上有显著区别。Struts1要求Action类继承抽象基类,而Struts2则允许Action类实现Action接口,或者直接使用具有`execute`方法的POJO对象。Struts2的Action对象是为每个请求创建的,解决了线程安全问题,而Struts1的Action是单例模式,需要保证线程安全。此外,Struts2的Action不依赖Servlet API,增强了测试友好性,可以通过依赖注入进行单元测试。
在处理用户输入方面,Struts1使用ActionForm对象来捕获输入,而Struts2直接将Action属性作为输入属性,简化了数据绑定。Struts2支持rich对象类型作为输入/输出对象,这得益于其ModelDriven特性。同时,Struts2引入了强大的表达式语言OGNL(Object Graph Navigation Language),替代了JSTL EL,提供了更高效的数据访问和操作能力。
对于视图层的绑定,Struts2使用“ValueStack”技术,使得页面可以直接访问和操作栈中的对象,而不必像JSP标准标签那样将对象绑定到页面上。这降低了视图和模型之间的耦合度,提升了开发效率。
Struts2在设计上更注重灵活性、可测试性和开发效率。它提供了丰富的配置选项,优化了Action的设计,简化了输入处理,并引入了强大的表达式语言和ValueStack机制,使得开发者能更专注于业务逻辑,而不是框架的底层细节。对于初学者而言,快速掌握Struts2的关键在于理解其核心概念,如Action、配置文件、OGNL和ValueStack,以及如何利用这些特性来构建高效的Web应用。