SpringMVC
2016-04-05 21:39
239 查看
MVC模型:
是一种架构型的模式,本身不引入新功能,只是帮助我们将开发的结构组织的更加合理,使展示与模型分离、流程控制逻辑、业务逻辑调用与展示逻辑分离。MVC(Model-View-Controller)三元组的概念:
Model(模型JAVABEAN):数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或JavaBean组件(包含数据和行为),不过现在一般都分离开来:ValueObject(数据)和服务层(行为)。也就是模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务。
View(视图,页面):负责进行模型的展示,一般就是我们见到的用户界面,客户想看到的东西。
Controller(控制器SERVLET):接收用户请求,委托给模型进行处理(状态改变),处理完毕后把返回的模型数据返回给视图,由视图负责展示。也就是说控制器做了个调度员的工作,。
在Web MVC模式下,模型无法主动推数据给视图,如果用户想要视图更新,需要再发送一次请求(即请求-响应模型)。
1.4.2、Servlet:一种JavaEEweb组件技术,是一种在服务器端执行的web组件,用于接收web用户请求并处理,最后动态产生响应给用户。轻量级。本质就是在java代码里面输出html流。
JSP最终还是会被编译为Servlet,只不过比纯Servlet开发页面更简单、方便。但表现逻辑、控制逻辑、业务逻辑调用还是混杂
Model2:在JavaEE世界里,它可以认为就是Web MVC模型
Model2架构其实可以认为就是我们所说的WebMVC模型,只是控制器采用Servlet、模型采用JavaBean、视图采用JSP,Model2架构可以看出,视图和模型分离了,控制逻辑和展示逻辑分离了。
缺点:
1. 1、控制器:1.1.1、控制逻辑可能比较复杂,其实我们可以按照规约,如请求参数submitFlag=toAdd,我们其实可以直接调用toAdd方法,来简化控制逻辑;而且每个模块基本需要一个控制器,造成控制逻辑可能很复杂;
1.1.2、请求参数到模型的封装比较麻烦,如果能交给框架来做这件事情,我们可以从中得到解放;
1.1.3、选择下一个视图,严重依赖Servlet
API,这样很难或基本不可能更换视图;
1.1.4、给视图传输要展示的模型数据,使用Servlet
API,更换视图技术也要一起更换,很麻烦。
1.2、模型:
1.2.1、此处模型使用JavaBean,可能造成JavaBean组件类很庞大,一般现在项目都是采用三层架构,而不采用JavaBean。职责:
Front Controller:前端控制器,负责为表现层提供统一访问点,从而避免Model2中出现的重复的控制逻辑(由前端控制器统一回调相应的功能方法,如前边的根据submitFlag=login转调login方法);并且可以为多个请求提供共用的逻辑(如准备上下文等等),将选择具体视图和具体的功能处理(如login里边封装请求参数到模型,并调用业务逻辑对象)分离。Application Controller:应用控制器,前端控制器分离选择具体视图和具体的功能处理之后,需要有人来管理,应用控制器就是用来选择具体视图技术(视图的管理)和具体的功能处理(页面控制器/命令对象/动作管理),一种策略设计模式的应用,可以很容易的切换视图/页面控制器,相互不产生影响。
PageController(Command):
a754
页面控制器/动作/处理器:功能处理代码,收集参数、封装参数到模型,转调业务对象处理模型,返回逻辑视图名交给前端控制器(和具体的视图技术解耦),由前端控制器委托给应用控制器选择具体的视图来展示,可以是命令设计模式的实现。页面控制器也被称为处理器或动作。
Context:上下文,还记得Model2中为视图准备要展示的模型数据吗,我们直接放在request中(Servlet
API相关),有了上下文之后,我们就可以将相关数据放置在上下文,从而与协议无关(如Servlet API)的访问/设置模型数据,一般通过ThreadLocal模式实现。
Spring Web MVC是一种基于Java的实现了Web
MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,SpringWeb
MVC也是要简化我们日常Web开发的。
Spring Web MVC也是服务到工作者模式的实现,但进行可优化。前端控制器是
DispatcherServlet
;应用控制器其实拆为处理映射器(Handler
Mapping)进行处理器管理和视图解析器(View Resolver)进行视图管理;页面控制器/动作/处理器为Controller接口(仅包含
ModelAndView handleRequest(request, response)方法)的实现(也可以是任何的POJO类);
提供了强大的约定大于配置(惯例优先原则)的契约式编程支持。
相关文章推荐
- JDK7浅解
- java swing 之 JScrollPane(滚动面板)的使用
- 循序渐进之Spring AOP(1) - 原理
- Java入门:基础算法之线性搜索
- 漫谈Java虚拟机(JVM)
- java实现子字符串的BM算法
- [025]Java矩阵运算——jama
- 在Eclipse中打开工程中的drawable里面的PNG格式的图片报错,找不到应用程序
- java swing 垂直流布局管理器实现
- Spring Bean配置细节
- java实现子字符串的KMP算法
- 解析java为什么不能创建FilterInputStream流
- Java入门:基础算法之检查奇偶性
- 【转】浅谈Java中的equals和==
- 一天一个Java基础——对象和类
- JAVA之jdk的设置
- Java入门:基础算法之检查素数
- java实现图的最短路径(SP)的贝尔曼福特(Bellman-Ford)算法
- Eclipse部署Maven--Maven常用配置
- java.lang.UnsatisfiedLinkError: Native method not found