三层架构和MVC

三层架构

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

  • 表现层:也就是web层,它负责接收客户端请求,向客户端响应结果,通常客户端使用http协议请求web层,web需要接收http请求,完成http请求。表现层包括展示层和控制层:控制层负责接收请求,展示层负责结果的展示。表现层依赖业务层,接收到客户端请求一般会调用业务层进行业务处理,并将处理结果响应给客户端。表现层的设计一般都使用MVC模型。(MVC是表现层的设计模型,和其他层没有关系)
  • 业务层:也就是service层,它负责业务逻辑处理。web层依赖业务层,但业务层不依赖web层。业务层在业务处理时可能会依赖持久层,如果要对数据持久化需要保证事务一致性,事务应该放到业务层来控制。
  • 持久层:也就是dao层。它负责数据持久化,包括数据层即数据库和数据访问层,数据库是对数据进行持久化的载体,数据访问层是业务层和持久化交互的接口,业务层需要通过数据访问层将数据持久化到数据库中。通俗的讲,持久层就是和数据库交互,对数据库表进行增删改查的。

MVC模型

       MVC全名是Model、View、Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种用于设计创建web应用程序表现层的模式。

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

SpringMVC概述

       SpringMVC是一种基于Java的实现MVC设计模型的请求驱动类型的轻量级Web框架,属于Spring FrameWork的后续产品,已经融合在Spring Web Flow里面。Spring框架提供了构建Web应用程序的全功能MVC模块,使用Spring可插入的MVC框架,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架,如Struts等。

       SpringMVC已经成为目前最主流的MVC框架之一,它通过一套注解,让一个简单的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编写更容易。
  11. 还用比如RESTful风格的支持、简单的文件上传、约定大于配置的契约式编程支持、基于注解的零配置支持等等。

SpringMVC和Struts2

  • 共同点:都是表现层框架,都是基于MVC模型编写的;底层都离不开原始ServletAPI;处理请求的机制都是一个核心控制器。
  • 区别:Spring MVC的入口是Servlet,而Struts2是Filter;Spring MVC是基于方法设计的,而Struts2是基于类,Struts2每次执行都会创建一个动作类,所以Spring MVC会稍微比Struts2快些;Spring MVC使用更加简洁,同时还支持JSR303,处理ajax的请求更方便;Struts2的OGNL表达式使页面开发效率相比Spring MVC更高些,但执行效率并没有比JSTL提升,尤其struts2的表单标签,远没有html执行效率高。
 posted on 2019-11-24 17:11  会飞的金鱼  阅读(127)  评论(0)    收藏  举报