一、简介
Struts2框架是一个按照mvc设计模式设计的Web层框架,是在Struts1和WebWork技术的基础上进行合并的全新框架。其全新的Struts2的体系结构与Struts的体系结构差别巨大。Struts2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离。
我们可以把Struts2理解成一个大大的Servlet,而这个servlet就是ActionServlet。Struts2在处理客户端请求时,会先读取web.xml配置文件,根据前端控制器将符合条件的请求分给不同的Action处理。在此之前,会把ActionServlet会把数据封装成一个JavaBean。
Struts2框架提供了许多的拦截器,在封装数据的过程中,我们可以对数据进行一些操作,例如:数据校验等等。当Action执行完后要返回一个结果视图,这个视图可以根据Struts2的配置文件中配置,选择转发或者重定向。
二、Struts2的执行流程
三、SpringMVC和Struts2的区别
- Struts2是类级别的拦截,一个类对应一个request上下文,SpringMvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上SpringMvc就容易实现restful url,而Struts2的架构实现起来要费劲,因为Struts2中Action的一个方法可以对应一个url,而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。
- SpringMvc的方法之间基本上独立的,独享request response数据,请求数据通过参数获取,处理结果通过Model交给框架,方法之间不共享变量。而Struts2搞的比较乱,虽然方法之间也是独立的,但是所有的Action变量却是共享的。
- 由于Struts2需要针对每个request进行封装,把request、session等Servlet生命周期的变量封装成一个一个Map,供给每个Action使用,并保证线程安全,所以在原则上,是比较耗费内存的。
- 拦截器实现机制上,Struts2有着自己的interceptor机制,SpringMvc用的独立的aop方式,这样导致Struts2的配置文件量比springMvc要大
- SpringMvc的入口是Servlet,而Struts2是filter,这就导致了二者的机制不同
- SpringMvc集成ajax,使用非常方便,只需要注解@ResponseBody就可以实现了,而Struts2拦截器集成了Ajax,在Action中处理一般必须要安装插件或者自己写代码集成进去,用起来相对不方便
- SpringMvc验证支持JSR303,处理起来相对更加灵活方便,而Struts2验证比较繁琐,感觉太乱
- SpringMvc和Spring是无缝连接的。从项目管理和安全上也比Struts2高
- SpringMvc开发效率和性能高于Struts2
- SpringMvc可以认为100%零配置(可通过Java Config的方式实现)
四、总结
本文只是对Struts2进行科普和增加对Struts2的了解,本人根本不用。请Struts2粉请不要黑