三层架构和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的优势
- 清晰的角色划分:前端控制器(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的请求更方便;Struts2的OGNL表达式使页面开发效率相比Spring MVC更高些,但执行效率并没有比JSTL提升,尤其struts2的表单标签,远没有html执行效率高。
posted on
浙公网安备 33010602011771号