2.2 Struts 2和Spring MVC
2.2 Struts 2和Spring MVC
Spring
框架提供了构建Web
应用程序的全功能MVC
模块:Spring MVC
。**Spring MVC
框架提供了一个DispatcherServlet
作为前端控制器来分派请求**,同时提供灵活的配置处理程序映射、视图解析、语言环境和主题解析功能,并支持文件上传。SpringMVC
还包含多种视图技术,例如Java Server Pages(JSP)
、 Velocity
、 Tiles
、 iText
和POI
等。 Spring MVC
分离了控制器
、模型对象
、分派器
以及处理程序对象的角色
,这种分离让它们更容易定制。
2.2.1 Spring MVC的优势
Spring MVC特点
Spring MVC
具有如下特点
Spring MVC
拥有强大的灵活性、非侵入性和可配置性Spring MVC
提供了一个前端控制器DispatcherServlet
,开发者无须额外开发控制器对象。Spring MVC
分工明确,包括控制器
、验证器
、命令对象
、模型对象
、处理程序映射
、视图解析器
,等等,每一个功能实现由一个专门的对象负责完成。Spring MVC
可以自动绑定用户输入
,并正确地转换数据类型。例如,Spring MVC
能自动解析字符串,并将其设置为模型的int
或float
类型的属性。Spring MVC
使用一个名称/值
的Map
对象实现更加灵活的模型数据传输。Spring MVC
内置了常见的校验器
,可以校验用户输入,如果校验不通过,则重定向回输入表单
。输入校验是可选的,并且支持编程方式及声明方式。Spring MVC
支持国际化,支持根据用户区域显示多国语言,并且国际化的配置非常简单.Spring MVC
支持多种视图技术,最常见的有JSP
技术以及其他技术,包括Velocity
和FreeMarker
。Spring
提供了一个简单而强大的JSP
标签库,支持数据绑定功能,使得编写JSP
页面更加容易
2.2.2 Spring MVC和Struts 2的区别
入口不同
从机制上来说, Spring MVC
的入口是Servlet
,而Struts 2
的入口是filter
,这样就导致了二者的机制不同。
性能不同
- 从性能上来说,
Struts 2
是基于类的设计,每发一次请求都会创建一个Action
实例,每个Action
都会被注入属性;- 而
Spring MVC
是基于方法的设计,粒度更细,一个方法对应一个request
上下文,而方法同时又跟一个URL
对应,从架构本身上Spring MVC
就非常容易实现RESTful URL
,而Struts 2
的架构实现起来相对麻烦,因为Struts 2
中Action
的一个方法可以对应一个URL
,但是类属性却被所有方法共享,这也就无法用注解或其他方式标识属性所属的方法。由于Struts 2
需要针对每个request
进行封装,把request
、session
等Servlet
生命周期的变量封装成一个一个的Map
,提供给每个Action
使用,并保证线程安全,所以在原则上, **Struts 2
是比较耗费内存的,所以Spring MVC
在性能上高于Struts 2
**。
参数传递机制不同
- 从参数上来说,
Spring MVC
的方法之间基本上是独立的,独享工request
和response
数据,请求数据通过参数获取,处理结果通过Model
交回给框架,方法之间不共量;- 而
Struts 2
虽然方法之间也是独立的,但其所有Action
变量是共享的,每次来了请求就创建一个Action
,一个Action
对象对应一个request
上下文.
设计思想不同
- 从设计思想上来说,
Strut s2
使用的是拦截器
(Interceptor
)机制,而Spring MVC
使用的是独立的AOP
方式,这样导致**Struts 2
的配置文件量还是比Spring MVC
大,Spring MVC
的使用更加简洁**。
数据验证方法不同
- 从数据验证上来说,
Spring MVC
的验证功能是一个亮点,支持JSR303
,处理Ajax
的请求更是方便,只需一个注解@ResponseBody
,然后直接返回响应文本即可,而Struts2
的验证则比较烦琐。
配置上的不同
- 从配置上来说,在实际项目开发中使用
Struts 2
时大多采用传统的配置文件的方式,Spring MVC
除了配置springmvc-servlet.xml
文件之外,已经是100%的零配置开发,所以在开发效率上高于Struts2
。