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)VelocityTilesiTextPOI等。 Spring MVC分离了控制器模型对象分派器以及处理程序对象的角色,这种分离让它们更容易定制。

2.2.1 Spring MVC的优势

Spring MVC特点

Spring MVC具有如下特点

  1. Spring MVC拥有强大的灵活性、非侵入性和可配置性
  2. Spring MVC提供了一个前端控制器DispatcherServlet,开发者无须额外开发控制器对象
  3. Spring MVC分工明确,包括控制器验证器命令对象模型对象处理程序映射视图解析器,等等,每一个功能实现由一个专门的对象负责完成。
  4. Spring MVC可以自动绑定用户输入,并正确地转换数据类型。例如, Spring MVC能自动解析字符串,并将其设置为模型的intfloat类型的属性。
  5. Spring MVC使用一个名称/值Map对象实现更加灵活的模型数据传输。
  6. Spring MVC内置了常见的校验器,可以校验用户输入,如果校验不通过,则重定向回输入表单。输入校验是可选的,并且支持编程方式及声明方式。
  7. Spring MVC支持国际化,支持根据用户区域显示多国语言,并且国际化的配置非常简单.
  8. Spring MVC支持多种视图技术,最常见的有JSP技术以及其他技术,包括VelocityFreeMarker
  9. 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 2Action的一个方法可以对应一个URL,但是类属性却被所有方法共享,这也就无法用注解或其他方式标识属性所属的方法。由于Struts 2需要针对每个request进行封装,把requestsessionServlet生命周期的变量封装成一个一个的Map,提供给每个Action使用,并保证线程安全,所以在原则上, **Struts 2是比较耗费内存的,所以Spring MVC在性能上高于Struts 2**。

参数传递机制不同

  • 从参数上来说,
    • Spring MVC的方法之间基本上是独立的,独享工requestresponse数据,请求数据通过参数获取,处理结果通过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