---恢复内容开始---

  当当当!!沉寂两日,学习Spring Web MVC去了。吐槽:近日跟同行探讨了下,前端攻城师,左肩担着设计师绘图,右肩担着JAVA代码?!我虽设计过UI,但这只算是PS技巧+偶尔的灵感,真正的设计师是讲创意、实用和美学的吧!呃,认为只有高手才懂得JAVA~~现在要努力做前端中设计好的,设计中懂得JAVA的?不错的方向吧,嘿嘿^^只要付出肯定有点收获!好吧,瑾以此文表达我的积极向上,我还在路上!如果Spring以后用不到,我就用又学到东西,阿Q自勉了- -!

一、为什么使用MVC

1  数据层代码和像HTML这样的表示层代码分开,易于定位问题和修改

2 数据层和表现层分开,可以实现多个视图共享一个模型的架构。起到重用数据层的作用

3 结构清晰,有利于分工协作

4 同设计模式一样,也是代码分离的一种手段,让冗长的代码,结构化

二、什么是MVC (Wikipedia):

MVC开始是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。

Model(模型):数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或JavaBean组件(包含数据和行为),不过现在一般都分离开来:Value Object(数据) 和 服务层(行为)。也就是模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务。
View(视图):负责进行模型的展示,一般就是我们见到的用户界面,客户想看到的东西。
Controller(控制器):接收用户请求,委托给Model进行处理(状态改变),处理完毕后把返回的模型数据返回给View,由视图负责展示。 也就是说控制器做了个调度员的工作。

从上图我们还看到,在标准的MVC中模型能主动推数据给视图进行更新。Model模型包含被用于填充View视图的数据。一个用户发起请求,Controller控制器处理请求,更新Model模型。这些Model模型,被反馈到View。它是一个循环。

三、从Backbone来理解MVC,有时候被称作MVP(LessThanDot.com)

注意到没,Model和View之间是不能传递任何信息的!这个最核心的是Presenter,在MVP的Presenter是负责从模型取数据,综合之后把它推送到View中。当一个View上有行为的时候,Presenter拦截它并与其他服务协调工作,导致Model变化。Presenter把这些Model的变化,推动他们回到了到视图。比喻为电梯,向上移动Model数据,向下更改View结构。

ok,这MVC、MVP只是个称呼,大家还都是称呼MVC。

一个常见的Web APP流程:
1. 用户在View上进行操作——比如在文本框输入数值或是点击按钮
2. Controller处理这个动作
3. Controller通过Model对数据进行增删改查,将其传递到View
4. View将数据展示给用户

从前端的角度来理解~~

那么View如何对Controller发送信息?有三种方式
1、目标操作(target-cation):工作方式:Controller在自己内部设定目标target,分发一个操作action给View对象,比如是个按钮。当按钮被点击时,action就会发送给与之对应的target。这样V和C就交流了,但V只知道发送action给target,并不了解C中如何处理的。
2、委托(delegate):用户交互不仅仅是按钮、滑块之类。绝大部分的delegate信息都是should,will,did这三种形式。should-V视图对象询问C的某对象,“我应该做什么”。比如点击一个连接,V视图对象问“我要打开这个链接吗”,这个是should信息。will-“我将要做这件事",did-“我已经做了这件事”。C把自己设置为V的委托(delegate),它让V知道:如果V想知道更多的关于将如何显示的信息的话,就向C发送delegate信息。通过接受V发过来的delegate信息,C就会做出相应的协调和处理。还有一点,每个V只能有一个delegate。
3、数据源(datasource):V不能拥有它所要显示的数据,记住这点非常重要!!V希望别人帮助它管理将要显示的数据,当它需要数据时,它就会请求别人的帮助,把需要的数据给它。datasource和delegate类似,V会发送cout,data、at信息给C来请求数据。

当Model发生变化了,如何告知Controller呢?
通知(Notification)是解决问题的好方法!它们是这样工作的,当M中的某些东西发生变化时,他们会向C发出通知“嘿,老兄,注意了啊,我这发生变化了”,或者他们会发出指向变化的指针给C,或其他什么的。

顺带推荐一个Backbone源码分析-Backbone架构+流程图 !虽然这个系列没有完成,但是架构和流程图对Backbone的整体把握还是非常有帮助的!

大致就是这样工作的了!

第四、Web MVC

MVC下面这个图是不是更直观呢?

Web端开发发展历程

CGI:(Common Gateway Interface)公共网关接口,一种在web服务端使用的脚本技术,使用C或Perl语言编写,用于接收web用户请求并处理,最后动态产生响应给用户,但每次请求将产生一个进程,重量级。

Servlet:一种JavaEE web组件技术,是一种在服务器端执行的web组件,用于接收web用户请求并处理,最后动态产生响应给用户。但每次请求只产生一个线程(而且有线程池),轻量级。而且能利用许多JavaEE技术(如JDBC等)。本质就是在java代码里面 输出 html流。但表现逻辑、控制逻辑、业务逻辑调用混杂

JSP:(Java Server Page):一种在服务器端执行的web组件,是一种运行在标准的HTML页面中嵌入脚本语言(现在只支持Java)的模板页面技术。本质就是在html代码中嵌入java代码。JSP最终还是会被编译为Servlet,只不过比纯Servlet开发页面更简单、方便。

直接转入最终模式~~

服务到工作者:Front Controller + Application Controller + Page Controller + Context

即,前端控制器+应用控制器+页面控制器(也有称其为动作)+上下文,也是Web MVC,责任更加明确。

这种清晰地结构让人一目了然,原作者非常厉害!

职责:
Front Controller:前端控制器,负责为表现层提供统一访问点,从而避免Model2中出现的重复的控制逻辑(由前端控制器统一回调相应的功能方法,如前边的根据submitFlag=login转调login方法);并且可以为多个请求提供共用的逻辑(如准备上下文等等),将选择具体视图和具体的功能处理(如login里边封装请求参数到模型,并调用业务逻辑对象)分离。

Application Controller:应用控制器,前端控制器分离选择具体视图和具体的功能处理之后,需要有人来管理,应用控制器就是用来选择具体视图技术(视图的管理)和具体的功能处理(页面控制器/命令对象/动作管理),一种策略设计模式的应用,可以很容易的切换视图/页面控制器,相互不产生影响。

Page Controller(Command):页面控制器/动作/处理器:功能处理代码,收集参数、封装参数到模型,转调业务对象处理模型,返回逻辑视图名交给前端控制器(和具体的视图技术解耦),由前端控制器委托给应用控制器选择具体的视图来展示,可以是命令设计模式的实现。页面控制器也被称为处理器或动作。

Context:上下文,还记得Model2中为视图准备要展示的模型数据吗,我们直接放在request中(Servlet API相关),有了上下文之后,我们就可以将相关数据放置在上下文,从而与协议无关(如Servlet API)的访问/设置模型数据,一般通过ThreadLocal模式实现。

文章列表

虽然博客中不允许涉及私塾在线,还是要感谢---跟开涛学SpringMVC

Backbone.js Is Not An MVC Framework

backbone.js MVC 架构解析

STS开发环境搭建指南V1.2

菜鸟学习Spring Web MVC之一的更多相关文章

  1. 菜鸟学习Spring Web MVC之二

    有文章从结构上详细讲解了Spring Web MVC,我个菜鸟就不引据来讲了.说说强悍的XP环境如何配置运行环境~~ 最后我配好的环境Tomcat.Spring Tool Suites.Maven目前 ...

  2. Spring Framework------>version4.3.5.RELAESE----->Reference Documentation学习心得----->Spring Framework中的spring web MVC模块

    spring framework中的spring web MVC模块 1.概述 spring web mvc是spring框架中的一个模块 spring web mvc实现了web的MVC架构模式,可 ...

  3. Spring Boot——2分钟构建spring web mvc REST风格HelloWorld

    之前有一篇<5分钟构建spring web mvc REST风格HelloWorld>介绍了普通方式开发spring web mvc web service.接下来看看使用spring b ...

  4. [转]Spring Boot——2分钟构建spring web mvc REST风格HelloWorld

    Spring Boot——2分钟构建spring web mvc REST风格HelloWorld http://projects.spring.io/spring-boot/ http://spri ...

  5. 初试 spring web mvc

    作为一名code需要了解更多的知识,编程方面的东西太多了,是个逐渐积累的过程.最近学习一下spring web mvc,写下我个人的一些经验. 1.准备jar包.spring mvc 已经到了版本4, ...

  6. 12.Spring——Web MVC框架

    1.Spring Web MVC 框架 2.Spring MVC Hello World 例子 1.Spring Web MVC 框架 Spring web         MVC 框架提供了模型-视 ...

  7. 4.Spring Web MVC处理请求的流程

  8. 1.Spring Web MVC有什么

    Spring Web MVC使用了MVC架构模式的思想,将web层进行职责解耦. 同样也是基于请求驱动的,也就是使用请求-响应模型.它主要包含如下组件: DispatcherServlet :前端控制 ...

  9. 菜鸟学习Spring——60s配置XML方法实现简单AOP

    一.概述. 上一篇博客讲述了用注解的形式实现AOP现在讲述另外一种AOP实现的方式利用XML来实现AOP. 二.代码演示. 准备工作参照上一篇博客<菜鸟学习Spring--60s使用annota ...

随机推荐

  1. CM005-逆向分析过程(上篇)

    前言 005,都说比较变态,很多人给放过去了,但是我还是决定上了它,既然变态就分两篇,上篇先实际说流程,到底应该怎么上它,下篇会告诉逆向分析的过程和方法 准备 [环境和工具] win7/xp虚拟机环境 ...

  2. iOS开发面试题整理

    前言 本文借鉴整理了iOS高级开发常见的面试题,并且分博客一一分析,希望能和大家一起进步学习. 欢迎大家关注我的 Github

  3. 在HTML中为JavaScript传递变量

    在html中为JavaScript传递变量是一个关键步骤,然后就可以通过对JavaScript变量操作,实现想要达到的目的 本节代码主要使用了JavaScript中的document对象中的getEl ...

  4. FUNMVP:5G技术对块链信任体系建设的影响

    01 区块链现阶段应用在于概念证明 12月10日,工信部向三大运营商正式发放了5G系统实验频率运用允许,这让区块链从业者开端思索5G技术与区块链分别的可能性.在互联网的基础上依据区块链的特性完成价值的 ...

  5. PAT甲题题解-1014. Waiting in Line (30)-模拟,优先级队列

    题意:n个窗口,每个窗口可以排m人.有k为顾客需要办理业务,给出了每个客户的办理业务时间.银行在8点开始服务,如果窗口都排满了,客户就得在黄线外等候.如果有一个窗口用户服务结束,黄线外的客户就进来一个 ...

  6. Beta版本冲刺(三)

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...

  7. 联想一体机怎么设置u盘启动|联想一体机bios改U盘启动方法(转)

    本文转自:http://www.xitongcheng.com/jiaocheng/xtazjc_article_29090.html 所需工具: 1.联想Lenovo品牌一体机 2.启动U盘:大白菜 ...

  8. Vue中methods(方法)、computed(计算属性)、watch(侦听器)的区别

    1.computed和methods 共同点:computed能现实的methods也能实现: 不同点:computed是基于它的依赖进行缓存的.computed只有在它的相关依赖发生变化才会重新计算 ...

  9. 开机自启动nginx,php-fpm

    开机自启动nginx,php-fpm(其他服务类似) centos 7以上是用Systemd进行系统初始化的,Systemd 是 Linux 系统中最新的初始化系统(init),它主要的设计目标是克服 ...

  10. jQuery简单效果