SpringMVC在三层架构的位置
SpringMVC的优势
- 清晰的⻆⾊划分:
前端控制器(DispatcherServlet)
请求到处理器映射(HandlerMapping)
处理器适配器(HandlerAdapter)
视图解析器(ViewResolver)
处理器或⻚⾯控制器(Controller)
验证器( Validator)
命令对象(Command 请求参数绑定到的对象就叫命令对象)
表单对象(Form Object 提供给表单展示和提交到的对象就叫表单对象)。 - 分⼯明确,⽽且扩展点相当灵活,可以很容易扩展,虽然⼏乎不需要。
- 由于命令对象就是⼀个 POJO,⽆需继承框架特定 API,可以使⽤命令对象直接作为业务对
象。 - 和 Spring 其他框架⽆缝集成,是其它 Web 框架所不具备的。
- 可适配,通过 HandlerAdapter 可以⽀持任意的类作为处理器。
- 可定制性,HandlerMapping、ViewResolver 等能够⾮常简单的定制。
- 功能强⼤的数据验证、格式化、绑定机制。
- 利⽤ Spring 提供的 Mock 对象能够⾮常简单的进⾏ Web 层单元测试。
- 本地化、主题的解析的⽀持,使我们更容易进⾏国际化和主题的切换。
- 强⼤的 JSP 标签库,使 JSP 编写更容易。
还有⽐如 RESTful ⻛格的⽀持、简单的⽂件上传、约定⼤于配置的契约式编程⽀持、基于注解的
零配置⽀持等等
SpringMVC 和 Struts2 的优略分析
共同点
它们都是表现层框架,都是基于 MVC 模型编写的。
它们的底层都离不开原始 ServletAPI。
它们处理请求的机制都是⼀个核⼼控制器。
区别
Spring MVC 的⼊⼝是 Servlet,⽽ Struts2 是 Filter
Spring MVC 是基于⽅法设计的,⽽ Struts2 是基于类,Struts2 每次执⾏都会创建⼀个
动作类。所以 Spring MVC 会稍微⽐ Struts2 快些。
Spring MVC 使⽤更加简洁,同时还⽀持 JSR303, 处理 ajax 的请求更⽅便。
(JSR303 是⼀套 JavaBean 参数校验的标准,它定义了很多常⽤的校验注解,我们可
以直接将这些注解加在我们 JavaBean 的属性上⾯,就可以在需要校验的时候进⾏校验
了。)
Struts2 的 OGNL 表达式使⻚⾯的开发效率相⽐ Spring MVC 更⾼些,但执⾏效率并没
有⽐ JSTL 提升,尤其是 struts2 的表单标签,远没有 html 执⾏效率⾼。