私塾在线学习网
http://www.sishuok.com/
《跟开涛学 SpringMVC》
开源电子书,请勿用于商业目的
版权归作者所有
作者博客:http://jinnianshilongnian.iteye.com/
第一章 Web MVC 简介
1.1、Web 开发中的请求-响应模型:
在 Web 世界里,具体步骤如下:
1、 Web 浏览器(如 IE)发起请求,如访问 http://sishuok.com
2、 Web 服务器(如 Tomcat)接收请求,处理请求(比如用户新增,则将把用户保存一下),最后产生响应(一般为 html)。
3、web 服务器处理完成后,返回内容给 web 客户端(一般就是我们的浏览器),客户端对接收的内容进行处理(如 web
浏览器将会对接收到的 html 内容进行渲染以展示给客户)。
因此,在 Web 世界里:
都是 Web 客户端发起请求,Web 服务器接收、处理并产生响应。
一般 Web 服务器是不能主动通知 Web 客户端更新内容。虽然现在有些技术如服务器推(如 Comet)、还 有 现 在的 HTML5
websocket 可以实现 Web 服务器主动通知 Web 客户端。
到此我们了解了在 web 开发时的请求/响应模型,接下来我们看一下标准的 MVC 模型是什么。
1.2、标准 MVC 模型概述
MVC 模型:是一种架构型的模式,本身不引入新功能,只是帮助我们将开发的结构组织的更加合理,使展示与模型分
离、流程控制逻辑、业务逻辑调用与展示逻辑分离。如图 1-2
图 1-2
首先让我们了解下 MVC(Model-View-Controller)三元组的概念:
Model(模型): 数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或 JavaBean 组件(包含数
据和行为), 不过现在一般都分离开来:Value Object(数据) 和 服务层(行为)。 也 就是模型提供了模型数据查询和
模型数据的状态更新等功能,包括数据和业务。
View(视图): 负责进行模型的展示,一般就是我们见到的用户界面,客户想看到的东西。
Controller(控制器): 接收用户请求,委托给模型进行处理(状态改变),处理完毕后把返回的模型数据返回给视图,
由视图负责展示。 也就是说控制器做了个调度员的工作,。
从 图 1-1 我们还看到,在标准的 MVC 中模型能主动推数据给视图进行更新(观察者设计模式,在模型上注册视图,当
模型更新时自动更新视图), 但 在 Web 开发中模型是无法主动推给视图(无法主动更新用户界面), 因 为在 Web 开发是
请求-响应模型。
那接下来我们看一下在 Web 里 MVC 是什么样子,我们称其为 Web MVC 来区别标准的 MVC。
1.3、Web MVC 概述
模型-视图-控制器概念和标准 MVC 概念一样,请参考 1.2,我们再看一下 Web MVC 标准架构,如图 1-3:
如图 1-3
在 Web MVC 模式下,模型无法主动推数据给视图,如 果 用户想要视图更新,需要再发送一次请求( 即 请求-响应模型)。
概念差不多了,我们接下来了解下 Web 端开发的发展历程,和使用代码来演示一下 Web MVC 是如何实现的,还有为
什么要使用 MVC 这个模式呢?
1.4、Web 端开发发展历程
此处我们只是简单的叙述比较核心的历程,如图 1-4
图 1-4
1.4.1、CGI:(Common Gateway Interface)公共网关接口,一种在 web 服务端使用的脚本技术,使用 C 或 Perl 语言编
写,用于接收 web 用户请求并处理,最后动态产生响应给用户,但每次请求将产生一个进程,重量级。
1.4.2、Servlet:一种 JavaEE web 组件技术,是一种在服务器端执行的 web 组件,用于接收 web 用户请求并处理,最后
动态产生响应给用户。但每次请求只产生一个线程(而且有线程池), 轻量级。而且能利用许多 JavaEE 技术(如 JDBC
等)。 本 质 就是在 java 代码里面 输出 html 流。但表现逻辑、控制逻辑、业务逻辑调用混杂。如图 1-5
图 1-5
如图 1-5,这种做法是绝对不可取的,控制逻辑、表现代码、业务逻辑对象调用混杂在一起,最大的问题是直接在 Java
代码里面输出 Html,这样前端开发人员无法进行页面风格等的设计与修改,即使修改也是很麻烦,因此实际项目这种
做法不可取。
1.4.3、JSP:(Java Server Page):一种在服务器端执行的 web 组件,是一种运行在标准的 HTML 页面中嵌入脚本语言
(现在只支持 Java)的模板页面技术。本质就是在 html 代码中嵌入 java 代码。JSP 最终还是会被编译为 Servlet,只不
过比纯 Servlet 开发页面更简单、方便。但表现逻辑、控制逻辑、业务逻辑调用还是混杂。如图 1-6
图 1-6
如图 1-6,这种做法也是绝对不可取的,控制逻辑、表现代码、业务逻辑对象调用混杂在一起,但比直接在 servlet 里输
出 html 要好一点,前端开发人员可以进行简单的页面风格等的设计与修改(但如果嵌入的 java 脚本太多也是很难修改
的), 因此实际项目这种做法不可取。
JSP 本质还是 Servlet,最 终 在 运 行 时 会生成一个 Servlet(如 tomcat,将在 tomcat\work\Catalina\web 应用名\org\apache\jsp
下生成), 但这种使得写 html 简单点,但仍是控制逻辑、表现代码、业务逻辑对象调用混杂在一起。
1.4.4、Model1:可以认为是 JSP 的增强版,可以认为是 jsp+javabean 如图 1-7
特点:使用<jsp:useBean>标准动作,自动将请求参数封装为 JavaBean 组件;还必须使用 java 脚本执行控制逻辑。