SpringMVC框架

服务器的三层架构:C/S

开发架构一般都是基于两种形式B/S,一种是C/S 架构,也就是客户端/服S务器,另一种是B/SB/S架构,也就是浏览器服务器。在JavaEE开发中,几乎全都是基于B/S架构的开发。那么在B/S架构中,系统标准的三层架构包括:表现层、业务层持久层

SpringMVC框架

MVC模型:

MVC全名是Model View Controller,是模型(model)一视图(view)一控制器(controller)的缩写,是一种用于设计创建web应用程序表现层的模式。MVC中每个部分各司其职:

  • Model(模型):通常指的就是我们的数据模型。作用一般情况下用于封装数据。
  • view(视图):通常指的就是我们的jsp或者html。作用一般就是展示数据的。通常视图是依据模型数据创建的。
  • Controller(控制器):是应用程序中处理用户交互的部分。作用一般就是处理程序逻辑的。

案例:我们要保存一个用户的信息,该用户信息中包含了姓名,性别,年龄等等。这时候表单输入要求年龄必须是1~100之间的整数。姓名和性别不能为空。并且把数据填充模型之中。此时除了js的校验之外,服务器端也应该有数据准确性的校验,那么校验就是控制器的该做的。

|- 当校验失败后,由控制器负责把错误页面展示给使用者。
|- 如果校验成功,也是控制器负责把数据填充到模型,并且调用业务层实现完整的业务需求。

MVC框架介绍:

1、SpringMVC是一种基于Java的实现 MVC设计模型的请求驱动类型的轻量级Web框架,属于Spring FrameWork的后续产品,已经融合在Spring Web Flow里面。Spring框架提供了构建Web应用程序的全功能MVC模块。使用Spring可插入的MVC架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MvC开发框架,如struts1(现在一般不用),Struts2等。
2、SpringMVC已经成为目前最主流的MVC框架之一,并且随着Spring3.0的发布,全面超越Struts2,成为最优秀的MVC框架。
3、它通过一套注解,让一个简单的Java类成为处理请求的控制器,而无须实现任何接口。同时它还支持RESTful编程风格的请求。

SpringMVC框架

SpringMVC的优势:

1、清晰的角色划分;

  • 前端控制器(DispatcherServlet)
  • 请求到处理器映射(HandlerMapping)
  • 处理器适配器(HandlerAdapter)
  • 视图解析器(ViewResolver)
  • 处理器或页面控制器(Controller)
  • 验证器(validator)
  • 命令对象(Command请求参数绑定到的对象就叫命令对象)
  • 表单对象(Form Object提供给表单展示和提交到的对象就叫表单对象)。

2、分工明确,而且扩展点相当灵活,可以很容易扩展,虽然几乎不需要。
3、由于命令对象就是一个POJo,无需继承框架特定API,可以使用命令对象直接作为业务对象。
4、和Spring其他框架无缝集成,是其它Web框架所不具备的。
5、可适配,通过HandlerAdapter可以支持任意的类作为处理器。
6、可定制性,HandlerMapping、ViewResolver等能够非常简单的定制。
7、功能强大的数据验证、格式化、绑定机制。
8、利用Spring 提供的Mock对象能够非常简单的进行web层单元测试。
9、本地化、主题的解析的支持,使我们更容易进行国际化和主题的切换。
10、强大的JSP标签库,使JSP编写更容易。

SpringMVC和Struts2的优略分析

1、共同点

  • 它们都是表现层框架,都是基于MVC模型编写的。
  • 它们的底层都离不开原始servletAPI。
  • 它们处理请求的机制都是一个核心控制器。

2、区别

  • Spring MVC的入口是 Servlet,而Struts2是Filter
  • Spring Mvc是基于方法设计的,而struts2是基于类,Struts2每次执行都会创建一个动作类。所以Spring MVC会稍微比Struts2快些。
  • Spring MVC使用更加简洁,同时还支持JSR303,处理ajax的请求更方便(JSR303是一套JavaBean参数校验的标准,它定义了很多常用的校验注解,我们可以直接将这些注解加在我们JavaBean的属性上面,就可以在需要校验的时候进行校验了。)
  • struts2 的oGNL表达式使页面的开发效率相比Spring MVC更高些,但执行效率并没有比JSTI提升,尤其是struts2的表单标签,远没有html执行效率高。