在JavaEE开发中,Spring和SpringMVC已经是标配的基础系统架构。前面已经介绍了Spring框架,在这里主要说说SpringMVC。
实际上SpringMVC是Spring框架的一部分,Spring框架成为JavaEE开发主流框架后,Spring开发小组又在Spring框架的基础上推出了MVC架构,主要用于支持WEB应用程序的开发。
MVC是Model(模型,也称为数据模型)、View(视图)、Controll(控制器)三个英文单词首字母的缩写。从MVC组合的三个单词也可以看出,MVC是一种设计模型,它使用控制器将数据模型和视图进行分离,也就是将视图和数据解耦。这样的好处是后端处理的数据模型和前端视图显示的数据格式无关,实现一个数据模型可以对应多个视图以不同的方式来展现数据,当数据模型或视图发生变化时,相互之间的影响也会降低到最低。
MVC中最重要的核心就是控制器,控制器与视图和模型相对独立,它起到一个负责分发请求和返回处理结果的作用,对请求和数据模型的处理一般由JavaBean负责。
MVC虽然需要程序员多写一些额外的代码,但它强制性地将视图和数据分开所带给我们的好处是毋庸置疑的。可以设想一下,在早期的JSP网页中,处理数据的代码和HTML展现的代码是混合在一起的,它们被完全耦合到一个文件中,程序逻辑也非常混乱,对后期程序的维护和扩展都是很大的问题。
前面我们谈了MVC的设计结构和在WEB开发中的优势,下面我们谈谈在实际开发中MVC的运用和架构。下图是在实际开发中的MVC架构图。
图1MVC实际开发架构图上图是在实际开发中MVC的架构图,架构图分为两部分:虚线框外的是WEB程序的浏览器部分,用户通过浏览器与系统进行交互,同时浏览器也负责解析JSP页面;虚线框内的是WEB程序的后台部分,这部分包括控制器(Controller类)、业务逻辑(Service类)、数据模型(实体类)、数据持久层(Mybatis框架)和MySQL数据库管理系统。
在MVC架构中,JSP页面就是视图,用户通过JSP页面发出请求后,SpringMVC会根据请求路径,将请求发给与请求路径对应的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方法,没有事务处理方法。下面的代码是实体类的样例。
现在我们已经对MVC的架构有了大致了解,后面在设计人脉系统的过程中,我们会用到这些知识。