Struts2和SpringMVC是比较流行的MVC框架,二者的工作流程大体相似,所以有些开发人员用起来的时候有些难以区分,那struts2和springMVC的区别有哪些?接下来我们就来给大家讲解一下这方面的内容。
1、springmvc入口是一个servlet前端控制器( DispatcherServlet ),struts2入口是一个filter过滤器(StrutsPrepareAndExecuteFilter).
2、struts2通过在action类中定义成员变量接收参数,(属性驱动和模型驱动),它只能使用多例模式管理action.
springmvc通过在coontroller方法中定义形参接收参数,springmvc可以使用单例模式管理controller.
3、springmvc是基于方法开发的,注解开发中使用requestMapping将url和方法进行 映射,如果根据url找到controller类的方法生成一个handler处理器对象(只包括一个method).
struts2是基于类开发的,每个请求过来创建一个action实例,实例对象中有若干个方法.
开发中建议使用springmvc,springmvc方法更类似service业务方法.
4、struts2采用值栈存储请求和相应的数据,通过OGNL存取数据;springmvc通过参数绑定期将request请求内容解析,并给方法形参赋值.
5、struts2和springmvc的速度是相当的,由于struts2的漏洞较多,跟多企业使用springmvc
6、SpringMVC验证支持JSR303,处理起来相对更加灵活方便,而Struts2验证比较繁琐,感觉太烦乱。
7、设计思想上,Struts2更加符合OOP的编程思想, SpringMVC就比较谨慎,在servlet上扩展。
8、拦截器实现机制上,Struts2有以自己的interceptor机制,SpringMVC用的是独立的AOP方式,这样导致Struts2的配置文件量还是比SpringMVC大。
struts2如何工作?
从一个高水平角度看,Struts2 是一个MVC拉动的(或MVC2)框架,Struts2 的模型-视图-控制器模式是通过以下五个核心部分进行实现的:
1. 操作(Actions)
2. 拦截器(Interceptors)
3. 值栈(Value Stack)/OGNL
4. 结果(Result)/结果类型
5. 视图技术
而Struts2 与传统的MVC框架略有不同,因为它由Action扮演模型的角色,而不是控制器,虽然这样会有一些重叠。
上图描述了Struts2 高级系统架构下的模型、视图及控制器。控制器是通过Struts2 分派servlet过滤器以及拦截器进行实现,模型是通过Actions进行实现,而视图则是结果类型和结果的结合。值栈和OGNL提供共同的路线、链接以及与其他组件之间的集成。
除了上述部分,还有许多组件相关的信息。web应用程序组件、Actions组件、拦截器组件、结果组件等等。
这些是Struts2 MVC模式的体系结构概述,在随后的章节中,我们将详细了解各个部分。
请求生命周期:
通过上述图片的描述,我们可以依照下面几点解释在Struts2 中用户的请求生命周期:
1. 用户发送一个资源需求的请求到服务器(例如:页面)。
2. 核心控制器查看请求后确定适当的动作。
3. 使用验证、文件上传等配置拦截器功能。
4. 执行选择的动作来完成请求的操作。
5. 另外,如果需要的话,配置的拦截器可做任何后期处理。
6. 最后,由视图显示结果并返回给用户。
这就是Struts2的工作流程,Struts2 是目前较为普及和成熟的基于MVC设计模式的web应用程序框架,它跟springMVC虽然都是MVC框架,但是还是有区别的,希望大家一定要合理使用!最后大家如果想要了解更多java架构师知识,敬请关注奇Q工具网。
推荐阅读: