SSM框架在Web应用开发中的设计与实现

2016-02-23 12:12
计算机技术与发展 2016年12期
关键词:设计模式配置文件视图

李 洋

(南京邮电大学 通信与信息工程学院,江苏 南京 210000)

SSM框架在Web应用开发中的设计与实现

李 洋

(南京邮电大学 通信与信息工程学院,江苏 南京 210000)

在Web应用的开发过程中,开发框架的选择非常重要。一个好的开发框架能够加速Web应用的开发速度,降低开发成本,减少开发人员的工作量,同时能够使Web应用具有良好的扩展性和移植性。基于SpringMVC+Spring+Mybatis(SSM)的框架凭借良好的性能和较快的开发效率,逐渐成为主流的Web应用开发框架组合。SpringMVC是一个基于MVC的框架,其主要负责表现层的功能,比如响应请求。Spring框架主要起到容器的功能,整合了SpringMVC和Mybatis,实现层与层之间的解耦,同时使业务逻辑更加清晰。Mybatis框架主要负责的是数据持久层,完成和数据库的相关操作。重点以权限管理模块为例,说明了SSM框架在开发后台管理系统中的应用,为开发后台管理系统提供了理论指导。

SpringMVC;Spring;Mybatis;Web应用;框架

0 引 言

目前,国内外有很多的Web开发技术,其中应用最广泛的两类技术分别是微软(Microsoft)公司的.Net平台和Sun及IBM等公司提出的J2EE平台。J2EE主要面向使用Java程序设计语言进行基于Web的企业应用的开发部署[1]。J2EE平台相较于.Net平台是开放的、跨平台的、可移植的,因此很多企业都选择J2EE平台的结构设计和解决方案。传统的J2EE以EJB(Enterprise JavaBean)容器为核心,EJB组件提供事务管理,处理用户请求,支持打包处理和资源管理等功能,但是EJB与EJB容器的高度耦合关系,使其可移植性差[2],同时EJB代码的复杂、维护的困难使其逐步被淘汰,因此轻量级的框架就应运而生。例如,Struts、Spring等,降低了开发的复杂度,提高了开发时的调试效率,进而提高了Web网站的开发速度。

1 MVC设计模式

MVC(Model-View-Controller,即模型-视图-控制器[3])是Web开发中的一种设计模式。图1显示了这三种组件的联系和功能的分工。

图1 MVC组件类型的关系与功能

在这种设计模式中,模型(Model)、视图(View)、控制器(Controller)分别履行不同的职责。Model主要实现业务的逻辑处理,业务规则的制定,包括数据库的访问。因此业务模型的设计是MVC设计模式中最重要的部分。View是根据模型数据创建的,用户能看到并且能与之交互。View通常是采集用户数据的输入,响应用户的请求。Controller通过读取视图中用户输入的数据,根据用户输入的数据选择合适的模型处理用户请求,并且选择合适的视图来展示模型处理结果。Controller并不参与数据的处理,而是将数据的处理交给Model执行。可见,MVC设计模式实现的业务处理和视图展示的分离,降低了每个模块之间的耦合度,达到了系统的设计目标和整体要求。

2 SpringMVC框架

SpringMVC框架是Spring基于MVC设计模型的用于构建Web应用程序的一种实现。在Web应用开发过程中,SpringMVC框架容纳了包括JSP在内的大量视图技术,可以灵活配置[4]。虽然SpringMVC与Struts功能类似,但是它们的实现原理不同。Struts2是基于类级别的拦截,一个类对应一个request上下文。SpringMVC是基于方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个URL对应。SpringMVC的工作流程如图2所示。

图2 SpringMVC工作流程图

SpringMVC框架的主要构件是前端控制器(DispatcherServlet)、处理器映射器(HandlerMapping)、处理器适配器(HandlerAdapter)、处理器(Handler)、视图解析器(ViewResolver)、视图[5]。其中,DispatcherServlet从HttpServlet继承而来,作用类似于一个Servlet,主要用于接收用户请求和响应服务,功能如下:

(1)实现文件上传,本地化解析功能;

(2)通过处理器映射器,将请求映射到处理器(返回一个执行链,包括一个处理器、多个处理器拦截器);

(3)通过处理器映射器实现多种类型的处理器;

(4)通过视图解析器实现逻辑视图到具体视图的解析;

(5)实现对具体视图的渲染;

(6)通过异常处理解析器解析执行过程中遇到的异常。

3 Spring框架

Spring是为降低企业的应用开发复杂度而创建的一种开源框架。其主要目的就是实现开发中各层之间的分离,实现允许每层灵活选择何种构件,并且为J2EE的开发提供集成框架。Spring为企业应用的开发提供了一种轻量级的解决方案[6]。Spring框架主要提供了面向切面(AOP)编程,核心的控制反转(IoC)机制,以及能够整合多种持久层的框架和拥有自己的MVC框架。Spring框架希望提供不是专注于某一层的解决方案,而是提供Java EE应用开发中各层的解决方案。从图3中可以看出,Spring框架实现了表现层、业务层、持久层的整合,但这并不意味着原来已有的框架能被Spring框架取代,而是Spring框架能够实现已有框架的无缝整合,为企业级应用开发提供更大的灵活性。

图3 Spring框架结构图

总结起来,Spring具有的优势为:

(1)提供了一种可有效地组织中间层对象方法。

(2)提供了一种非侵入设计,降低了代码污染。

(3)Spring通过依赖注入机制降低了业务对象之间的复杂性,实现了对象、组件之间的解耦。

(4)通过AOP实现日志、事务等功能的集中式管理。

(5)Spring的ORM和DAO(Data Access Objects)[7]实现了整合多种持久层框架的可能性,简化了开发人员对数据库的操作。

(6)Spring作为整合组件,可以整合其他框架,为企业级应用的开发提供更大的灵活度。

相关术语如下所述:

IoC(Inversion of Control,控制反转):面向对象开发中,这是一种设计原则,用来降低代码之间的关联性。IoC将设计好的类不是在类的内部实现控制,而是由系统去控制,这称为控制反转[8]。

AOP(Aspect-Oriented Programming,面向切面编程):是由Gregor Kiczales提出的一种全新的编程技术,为开发者提供了一种描述横切关注点的机制[9]。AOP通过动态代理,实现将多个系统级服务(例如日志、事务等)的行为封装到可重用的模块中,用来实现业务逻辑和系统级服务的松耦合。

非侵入式:侵入式设计表现为客户端程序需要继承框架中的类,而非侵入式设计则表现为客户端实现框架提供的接口,这样就减少了应用程序对框架的依赖,以及框架移植时的负担,提高了应用程序组件的复用性。

4 Mybatis框架

Mybatis是J2EE应用开发中的一个持久层框架,它通过配置的XML文件或者注解实现对象和存储过程,SQL语句的关联,而不是实现对象与数据库表的关联,并且可以实现动态生成SQL语句。MyBatis框架集合多种操作型关系数据的概念和方法,它是一个强大的数据访问工具和解决的方法[10]。Mybatis与JDBC相比,简化了相关代码的实现,其通过使用注解方法或者简单的XML配置文件实现原始映射,然后通过映射引擎将JavaBean或者定义的接口映射成数据库中的记录。Mybatis的工作原理如图4所示。通过XML配置文件将JavaBean、Map以及本数据类型(如Integer、String等)映射成PreparedStatement所需的输入参数以ResultSet结果集的类型。

Mybatis让程序将主要精力放在SQL语句上,通过Mybatis提供的映射方式,自由灵活生成(半自动化,大部分需要程序员编写SQL)满足需要的SQL语句,修改比较容易。Mybatis可以将PreparedStatement中的输入参数自动进行输入映射,将查询结果集灵活映射成Java对象。相对于其他的ORM框架(如Hibernate),Mybatis适用于需求变化多的项目(如互联网项目)。

图4 Mybatis的工作原理图

5 基于SSM的后台管理系统实现

5.1 整合SSM框

SSM是SpringMVC、Spring、Mybatis的简写。SSM是轻量级并且应用较多的一种组合框架,好多中小型企业的门户网站、政府网站、金融项目都是基于SSM架构开发的。由于Spring是一个业务层的框架,能够很好地整合表现层的SpringMVC框架和持久层的Mybatis框架。整合以后,Spring就会充当整个应用的工厂。首先整合Spring和Mybatis,Spring整合Mybatis最简单的理解就是“把Mybatis数据源的配置、事务的管理、SqlSessionFactory的创建以及数据映射器接口Mapper的创建交由Spring管理”,所以Mybatis的配置文件mybatis-config.xml中不需要再配置数据源及事务,在业务层service实现时不需要手动地获取SqlSession以及对应的数据映射器接口Mapper,通过Spring的注入即可。Spring整合Mybatis的配置文件部分代码如下:

class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

第二步整合SpringMVC和Spring。由前述可知SpringMVC框架是Spring的基于MVC设计模型的实现,因此单独配置一个SpringMVC的配置文件,其主要完成自动扫描控制器、视图模式、注解的启动等功能的配置,然后在web.xml文件中配置整合即可。SpringMVC的配置文件部分代码如下:

class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">

5.2 系统模型

经过网站需求的分析,网站的后台管理功能设计结构如图5所示。

图5 后台管理功能结构图

5.3 体系架构

J2EE规范了服务器端应用系统开发的框架,其核心思想就是组件与分层。其分层主要包括三个方面:表示层、业务逻辑层、数据层。在实际项目开发过程中,由于项目的需求与设计,通常需要扩展三层划分的体系结构,一般是拆分原来的三层体系划分变为四层体系划分,也就是在业务逻辑层与数据层之间增加一个服务层。其用于持久层的数据操作,表示数据库的持久内存存储对象[11]。

开发中四层体系结构如图6所示。

图6 J2EE四层开发架构图

5.4 系统实现

在后台管理系统结构图中,网站后台管理总共有四种功能:权限管理、知识管理、资讯管理、活动管理。所谓的管理就是实现数据库的增删改查,因为知识、活动、资讯管理都是以权限管理为基础的,因此下面主要讲述权限管理功能的实现。

5.4.1 数据持久层

MyBatis应用程序首先创建SqlSessionFactory实例,其作用相当于一个数据库连接池,然后SqlSessionFactory通过配置的XML文件来获取一个SqlSession。执行SQL语句所必须的方法,都包含在SqlSession中,所以通过SqlSession完成对数据库的操作,用完之后需要释放数据库连接。

5.4.2 服务层

数据访问采用DAO(数据访问对象)模式[12],DAO是数据库访问接口,可以从任何一种配置好的数据源处获取数据[13]。服务层(DAO)的使用可以减少业务逻辑代码和数据库访问代码之间的耦合度,有利于划分和分配任务。这里用权限管理里面的角色管理举例,首先定义接口类RoleDao,其定义如下:

public interfaceRoleDao {

//根据id查询角色信息

public RolefindRoleById(int id) throws Exception;

//修改角色

public voidmodifyRole(int roleId) throws Exception;

//添加角色

public voidinsertRole(Role role) throws Exception;

//删除角色

public voiddeleteRole(int id) throws Exception;

然后定义其接口实现类RoleDaoImpl,在接口实现类中实现的RoleDao接口中声明的方法。根据id查询角色信息的方法实现如下:

public Role find RoleById(int id) throws Exception {

SqlSession sqlSession=sqlSessionFactory.openSession();

Role role=sqlSession.selectOne("test.findRoleById", id);

sqlSession.close();

return role;

}

最后在Mybatis的mapper配置文件中添加如下配置即可。

5.4.3 控制层

在增删改一个用户信息时,需要一个Form表单来临时存储用户信息表中各个字段的信息,因此需要一个表单类RoleInfoForm。它其实就是一个简单的JavaBean,并且每个字段都定义了Getter()和Setter()方法,然后直接就可以在Controller的函数参数列表中直接写这个JavaBean对象,Spring会自动进行封装。Controller中代码如下:

@RequestMapping(value="/roleInfo ",method =RequestMethod.POST)

public String queryRole(RoleForm role,HttpSession session,Model model)

throws UnsupportedEncodingException,

Exception {

}

已经在web.xml的文件中配置了请求地址,DispatcherServlet会根据请求地址把该次请求分派到所写的Controller类中的方法上。通过注解@Controller注册所写的Controller类,@RequestMapping注册请求的路径。至此,控制层的功能已经实现。

5.4.4 表示层

通过DispatcherServlet可以将页面的链接地址、提交的表单请求转发到注册过的Controller类中的方法上,实现整个系统页面之间的跳转。由于在SpringMVC的配置文件中已经配置好了视图解析器,其解析的文件是ftl文件,所以需要开发的是ftl文件,而不是JSP文件。

6 结束语

文中结合SpringMVC、Spring、Mybatis框架的各自功能和特点,很好地体现了MVC分层开发的设计理念,因而有利于应用程序的维护和功能扩展,降低每个模块之间的耦合度,达到了系统的设计目标和整体要求。

[1] 冯 博,朱穗晖.程序设计教程[M].北京:清华大学出版社,2005.

[2] Amstrong E,Ball S,Bodoff S,et al.The J2EE 1.4 tutorial[M].[s.l.]:Sun Micro Systems Inc.,2005:2-25.

[3] 邬继成.Struts与Hibernate实用教程[M].北京:电子工业出版社,2006.

[4] Andrew H.Object-oriented analysis and design[M].Beijing:China Machine Press,2003:17-56.

[5] Linaje M,Preciado J,Sanchez F F.Engineering rich internet application user interfaces over web-models[J].IEEE Internet Computing,2007,11(6):53-59.

[6] 李 刚.轻量级JavaEE企业应用实战[M].第4版.北京:电子工业出版社,2015.

[7] 黎永良,崔杜武.MVC设计模式的改进与应用[J].计算机工程,2005,31(9):96-97.

[8] 魏学松,张育平.IOC框架的研究与设计[J].计算机技术与发展,2006,16(3):213-216.

[9] Elrad T,Aksit M,Kiczales G,et al.Discussing aspects of AOP[J].Communications of the ACM,2001,44(10):33-38.

[10] 张 宇,王映辉,张翔南.基于Spring的MVC框架设计与实现[J].计算机工程,2010,36(4):59-62.

[11] 刘中兵.开发者突击:Java Web主流框架整合开发:J2EE+Struts+ Hibernate+ Spring[M].北京:电子工业出版社,2008.

[12] 贾 昆,甘仞初,高慧颖.数据访问对象模式在企业应用集成中的应用[J].计算机工程与设计,2006,27(3):373-375.

[13] 王 坤.基于J2EE平台Spring MVC框架开发的MIS系统设计与实现[D].上海:华东师范大学,2008.

Design and Implementation of SSM in Web Application Development

LI Yang

(College of Telecommunications and Information Engineering,Nanjing University of Posts and Telecommunications,Nanjing 210000,China)

In the process of Web application development,the choice of development framework is essential.A good development framework can accelerate the development of Web application,reduce development costs,ease the burden of developer and make the Web application has good expansibility and portability.Framework based on SpringMVC,Spring and Mybatis with better performance and faster development productivity has gradually become the preferred combination of Web application development framework.SpringMVC is a MVC framework,which is in charge of the function of presentation layer like responding to the request.Spring framework plays the part of container,which integrates Mybatis and SpringMVC,and implements the decoupling between layers.Meanwhile,it can make business logic becomes more clear.Mybatis framework is mainly responsible for data persistence layer and complete the operation of database.Taking the rights management module as an example,in order to explain the application of SSM framework in the development of back-stage management system,it provides theoretical guidance for the development of back-stage management system.

SpringMVC;Spring;Mybatis;Web application;framework

2016-03-04

2016-06-15

时间:2016-11-22

国家自然科学基金资助项目(61271234)

李 洋(1991-),男,硕士研究生,研究方向为卫星通信技术。

http://www.cnki.net/kcms/detail/61.1450.TP.20161122.1227.014.html

TP39

A

1673-629X(2016)12-0190-05

10.3969/j.issn.1673-629X.2016.12.041

猜你喜欢
设计模式配置文件视图
“1+1”作业设计模式的实践探索
三维协同设计模式下的航天项目管理实践与展望
互不干涉混用Chromium Edge
基于Zookeeper的配置管理中心设计与实现
忘记ESXi主机root密码怎么办
交通机电工程设计模式创新探讨
为View桌面准备父虚拟机
5.3 视图与投影
视图
Y—20重型运输机多视图