`
gao_xianglong
  • 浏览: 461729 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

详解SSJ(Spring3.x mvc + Spring3.x Core + JPA2.x)轻量级集成开发—第7章 笔者带走进Spring3.x MVC的世界

阅读更多

上一章 详解SSJ(Spring3.x mvc + Spring3.x Core + JPA2.x)轻量级集成开发—第6章 剖析Spring3.x AOP特性02

下一章 详解SSJ(Spring3.x mvc + Spring3.x Core + JPA2.x)轻量级集成开发—第8章 Spring3.x mvc核心类库及基础构建

 

目录

一、MVC模型介绍;

二、Spring MVC简介;

三、剖析Spring MVC工作流程;

四、使用Maven工程构建Spring MVC应用;

 

前言

笔者的前几章博文都陆续得到了大家的支持认同,尤其是《笔者带你剖析Java7.x新特性》博文更是深受大家欢迎,在此笔者由衷的感谢ITeye上所有支持笔者的朋友。从系列博文的第一章至第六章,笔者已经完成了对Spring3.x Core的详细讲解,所以从本章开始请跟随笔者一起学习有关Spring Web领域的相关知识。如果你以前使用过Struts、WebWork等MVC Frameworks来构建你的Web应用,那么你将能够很快的接受本章及后续章节的内容。当然本章内容更多的是围绕Spring MVC的架构进行介绍,对于不太喜欢理论知识的朋友,请关注笔者后续章节。反之请耐心阅读本章内容,或许你会有意想不到的收获。

 

一、MVC模型介绍

MVC(Model、View、Controller)是在程序开发过程中衍生出的一套程序设计思想,它由三个单词的缩写组成,分别为:模型层(Model)、表现层(View)和控制层(Controller)。至于使用MVC的目的,就在于它能够更明确的定义Web系统的组件分工
在早期的Java Web应用开发过程中,JSP既要负责页面的显示工作,同时也要负责实际的业务处理。从而导致了整个JSP页面出现高耦合、低复用等诸多弊端因素。笔者相信这些痛苦对于每个Web 程序员来说都是不言而喻的,但随着MVC架构的出现,程序的扩展性和伸缩性都将得到更好的保障。

MVC架构工作流程图:

 

通过上述视图我们可以发现,View层组件仅负责页面显示工作,数据的预处理工作(类型转换、DTO封装、数据效验、数据交互)则由Controller层组件负责,至于具体的业务实现则交由Model层组件负责。只要满足这种规范的设计我们都可以称之为MVC(并不要求采用指定的技术实现)。但是在实际的开发过程中,开发人员往往需要使用一些规范实现来简化日常工作,这样便促使了WebWork、Struts2等诸多优秀MVC Frameworks的诞生。

 

提示

对于开发人员来说,使用任何Framework进行业务解耦是目的(理论而言)。但实现企业快速开发,提高员工生产力才是主要。

 

二、Spring MVC简介

Spring MVC属于Spring平台整体的一部分,由于它分离了View层组件、Controller层组件、Model层组件以及分发器等,所以Spring MVC被定义为一个标准的企业级MVC规范实现。并提供有丰富的功能,只为构建强大且健壮的Java Web应用。与早期版本相比,Spring3.x MVC将具备更强的灵活性配置性。在实际的开发过程中,Spring MVC并没有强制要求开发人员只能选用JSP作为View层组件(可以选则Velocity、Tiles、iText等其他技术),这种开放性打破了以往的常规式选择。并且一旦在项目中使用了Spring提供的相关Annotations,一切事情将变得非常简单和有趣。开发人员将再不必为Controller实现任何接口,也无需在配置文件中定义冗长且繁琐的映射关系,对于支持Restful风格的Spring MVC来说,未来将注定成为主流趋势。你没听错,这些都是Spring3.x MVC所带给开发人员的改变。当然这仅仅只是一部分。关于其它特性,笔者在后续章节会进行着重讲解。

 

三、剖析Spring MVC工作流程

在早期大行其道的SSH(Struts2.x + Spring + Hibernate)集成开发模式中,Struts2.x是开发人员最为熟悉的一种MVC Framework。不知大家是否还记得Struts2.x的工作流程机制?当客户端提交请求至服务端时,Struts2的FileterDispatcher(核心控制器)会负责拦截,并且内置拦截器会负责对请求中的参数做一系列的预处理工作(包含:解析参数、类型转换、DTO封装等)。然后提交给具体的Action(业务控制器)调用业务实现直至返回处理结果,最后Action根据处理结果forward到具体的View层组件。

上述笔者简单的阐述了Struts2的工作流程机制,不得不承认,Struts2.x的确是一个设计精良的MVC框架,它将表现层(Model)、模型层(View)、控制层(Controller)等3个模块的组件分工划分的极为清晰。既然Struts2.x这么完美,那么为什么大家还需要使用Spring MVC呢?对于这个问题即便是拥有多年开发经验的开发人员或许也会存在疑问,他们都有一个统一的答案:客户决说了算。的确商业化的项目构建确实不用开发人员思考太多,但这却令人感到一种无奈。当然笔者在此篇博文中并不会针对Struts2.x的缺陷大做文章,因为任何一种技术都伴随着缺陷,这是不可避免的,其中同样也包括Spring。

Spring MVC的工作流程机制参考于Struts2.x,但整体构架却大相庭径。简单来说Struts2.x的内核中充斥着大量的内置拦截器(约70%),但Spring MVC却并没有选择这么做。在Spring MVC的工作流程机制中,客户端的请求响应/分发工作全由DispatcherServlet(前端控制器)负责,DispatcherServlet仅只是一个普通的Servlet。当DispatcherServlet成功拦截客户端请求后,便会加载WEB-INF目录下的Spring MVC配置文件。然后根据HandlerMapping的实例(配置文件中的映射信息)分发给对应的Controller(业务控制器)处理。Controller在调用具体的业务实现之前,会负责一系列的参数预处理工作(包含:解析参数、类型转换、封装DTO等)。最后Controller根据处理结果forward到具体的View层组件。

Spring工作流程图示例:

 

提示

对于从未接触过Struts2.x的开发人员而言,笔者不建议你重新学习一遍。如果大家非要问为什么,那么笔者的答案就是Spring MVC构建简单。Struts2.x的确拥有太多令人惊艳的功能,但这些功能在实际开发过程中,已经多到成为“鸡肋”。

 

四、使用Maven工程构建Spring MVC应用

Maven是一种基于项目对象模型(POM)的项目管理工具(纯Java开发),它可以通过一小段描述信息来管理项目的构建类库依赖。相对于Ant等传统项目纯构建工具而言,Maven所包含的功能更像是一个功能的超集。至于如何使用Maven请参考笔者的《Use Maven3.x》系列博文。

在此,笔者推荐的IDE工具并非是eclipse或MyEclipse,而是STS(Spring Tool Suite),因为STS工具专为构建Spring应用而生。STS在eclipse的基础之上进行了二次开发,所以熟悉eclipse的开发人员将会非常容易上手STS。值得庆幸的是,STS同样也是开源的,你可以登陆http://www.springsource.org/sts站点进行最新版本的下载。

选择File->new->Spring->Spring Template Project构建Spring应用工程:

 

选择Spring MVC Project点击Next:

 

接下来我们要做的事情就是指定项目名称和定义项目经纬,最后点击Finish完成创建:

 

当使用STS工具成功创建Spring MVC项目后,我们可以发现。项目的管理缺省是基于Maven进行管理的,并且STS工具已经自动为开发人员生成了Spring所需的各项配置文件,我们只需要在后续的开发过程中进行扩充既可。

 

本章内容到此结束,由于时间仓库,本文或许有很多不尽人意的地方,希望各位能够理解和体谅。关于下一章的内容,笔者打算继续讲解Spring MVC的相关内容。

至于后续章节博文的更新周期,笔者会在本月15号以后才会进行更新,希望大家谅解。

3
2
分享到:
评论
9 楼 gao_xianglong 2013-03-09  
jay263566831 写道
略少啊 刚看到目录 下次讲具体流程是吧?
还是支持了

感谢
8 楼 jay263566831 2013-03-07  
略少啊 刚看到目录 下次讲具体流程是吧?
还是支持了
7 楼 gao_xianglong 2013-03-06  
linuxp363 写道
意犹未尽,只是个spring mvc的简介

多多包容,这段时间事情多
6 楼 linuxp363 2013-03-05  
意犹未尽,只是个spring mvc的简介
5 楼 gao_xianglong 2013-03-05  
longfor5 写道
有点少

这段时间,事情比较多,呵呵。
4 楼 gao_xianglong 2013-03-05  
ximinjie 写道
由于时间仓库
    时间仓促

有个错别字,不错,一直在关注你的blog,期待更精彩的内容,很期待你介绍JPA方面的内容。

感谢
3 楼 longfor5 2013-03-05  
有点少
2 楼 ximinjie 2013-03-05  
由于时间仓库
    时间仓促

有个错别字,不错,一直在关注你的blog,期待更精彩的内容,很期待你介绍JPA方面的内容。
1 楼 duoduodeai 2013-03-04  
  不错,顶!

相关推荐

Global site tag (gtag.js) - Google Analytics