在Java EE开发中,Spring和Spring MVC已经是标配的基础系统架构。前面已经介绍了Spring框架,在这里主要说说Spring MVC。
实际上Spring MVC是Spring框架的一部分,Spring框架成为Java EE开发主流框架后,Spring开发小组又在Spring框架的基础上推出了MVC架构,主要用于支持WEB应用程序的开发。
1:什么是MVC
MVC(Model View Controller)是一种软件设计的框架模式,它采用模型(Model)-视图(View)-控制器(controller)的方法把业务逻辑、数据与界面显示分离。把众多的业务逻辑聚集到一个部件里面,当然这种比较官方的解释是不能让我们足够清晰的理解什么是MVC的。用通俗的话来讲,MVC的理念就是把数据处理、数据展示(界面)和程序/用户的交互三者分离开的一种编程模式。
注意!MVC不是设计模式!
MVC框架模式是一种复合模式,MVC的三个核心部件分别是
1:Model(模型):所有的用户数据、状态以及程序逻辑,独立于视图和控制器。
2:View(视图):呈现模型,类似于Web程序中的界面,视图会从模型中拿到需要展现的状态以及数据,对于相同的数据可以有多种不同的显示形式(视图)。
3:Controller(控制器):负责获取用户的输入信息,进行解析并反馈给模型,通常情况下一个视图具有一个控制器。
1.2:为什么要使用MVC
程序通过将M(Model)和V(View)的代码分离,实现了前后端代码的分离,会带来几个好处。
1:可以使同一个程序使用不同的表现形式,如果控制器反馈给模型的数据发生了变化,那么模型将及时通知有关的视图,视图会对应的刷新自己所展现的内容。
2:因为模型是独立于视图的,所以模型可复用,模型可以独立的移植到别的地方继续使用。
3:前后端的代码分离,使项目开发的分工更加明确,程序的测试更加简便,提高开发效率。
2.1、Spring MVC简介及特点
Spring MVC采用了松散耦合的可插拔组件结构,比其他的MVC框架更具有灵活性和扩展性,Spring MVC通过使用一套注解,使一个Java类成为前端控制器(Controller),不需要实现任何接口,同时,Spring MVC支持RES形式的URL请求,除此之外,Spring MVC在在数据绑定、视图解析、本地化处理及静态资源处理上都有许多不俗的表现。
SpringMVC围绕DispatcherServlet(前端控制器)为中心展开,DispatcherServlet(前端控制器)是Spring MVC的中枢,和MVC的思想一样,它负责从视图获取用户请求并且分派给相应的处理器处理,并决定用哪个视图去把数据呈现给给用户。
MVC虽然需要程序员多写一些额外的代码,但它强制性地将视图和数据分开所带给我们的好处是毋庸置疑的。可以设想一下,在早期的JSP网页中,处理数据的代码和HTML展现的代码是混合在一起的,它们被完全耦合到一个文件中,程序逻辑也非常混乱,对后期程序的维护和扩展都是很大的问题。
前面我们谈了MVC的设计结构和在WEB开发中的优势,下面我们谈谈在实际开发中MVC的运用和架构。下图是在实际开发中的MVC架构图。

图 1 MVC实际开发架构图
上图是在实际开发中MVC的架构图,架构图分为两部分:虚线框外的是WEB程序的浏览器部分,用户通过浏览器与系统进行交互,同时浏览器负责解析JSP页面;虚线框内的是WEB程序的后台部分,这部分包括控制(Controller类)、业务逻辑(Service类)、数据模型(实体类)、数据持久层(Mybatis框架)和MySQL数据库管理系统。
在MVC架构中,JSP页面就是视图,用户通过JSP页面发出请求后,Spring
MVC会根据请求路径,将请求发给与请求路径对应的Controller类,Controller类调用Service类对请求进行处理,Service类会调用数据持久层MyBatis完成对实体类的存取和查询工作,并将处理结果返回到Controller类,Controller类将处理结果转换为ModelAndView对象,JSP接收ModelAndView对象并进行渲染。
Controller类是在普通Java类的头部加入@Controller注解,使其变为Controller类,在Controller类中使用@RequestMapping注解标记在Controller类方法的头部,使该方法可以响应一个WEB请求地址,当JSP页面向这个地址发送请求时,该方法会被调用。下面的代码是Controller类的样例。

Service类为业务逻辑处理类,在类的头部使用注解@Service标注,被注解@Service标注的类会被Spring框架自动注入到Controller类。下面的代码是Service类的样例。

实体类也是POJO类,也就是MVC的数据模型,实体类仅有属性以及获取和设置属性的get和set方法,没有事务处理方法。下面的代码是实体类的样例。

Spring MVC特点
1:让我们能非常简单的设计出干净的Web层和薄薄的Web层;
2:进行更简洁的Web层的开发;
3:天生与Spring框架集成(如IoC容器、AOP等);
4:提供强大的约定大于配置的契约式编程支持;
5:能简单的进行Web层的单元测试;
6:支持灵活的URL到页面控制器的映射;
7:非常容易与其它视图技术集成,如Velocity、FreeMarker等,因为模型数据不放在特定的API里,而是放在一 个Model里(Map数据结构实现,因此很容易被其他框架使用);
8:非常灵活的数据验证、格式化和数据绑定机制,能使用任何对象进行数据绑定,不必实现特定框架的API;
9:提供一套强大的JSP标签库,简化JSP开发;
10:支持灵活的本地化、主题等解析;
11:更加简单的异常处理;
12:对静态资源的支持;支持Restful风格。
现在我们已经对MVC的架构有了大致了解,后面在设计人脉系统的过程中,我们会用到这些知识。以上如有不对的地方,欢迎您提出宝贵的意见哦。




