邹红霆
基于SSM框架的Web系统研究与应用
邹红霆
(广东轻工业职业技术学院信息技术学院, 广州 510627 )
基于EJB等的重量级的Web应用存在着很多问题, 如代码复用率低、复杂程度高、维护性差. 本文提出了一种新的基于MVC结构, 使用轻量级的SpringMVC+Spring+Mybatis(SSM)开发框架, 并且对其结构整合、组成、开发优点等进行了探究, 并以构建城市供水业务系统为例子, 说明了SSM框架在实际开发中, 能提高代码的复用率、系统的性能等.
Web应用; SpringMVC; Spring; Mybatis; 框架
目前, 国内外有很多开发Web应用的技术, 其中广为人知的就有Sun及IBM公司提出的JavaEE平台和微软(Microsoft)公司的. Net平台. 由于JavaEE相较于.Net平台是可移植、跨平台、开源的, 所以企业级开发往往都是选择基于JavaEE平台的设计和解决方案[1]. 而传统的EJB(Enterprise Java Bean)是JavaEE的核心, 因其代码复杂, 维护困难, 逐渐在企业级开发中被淘汰. 因此, 需要一个更加轻量级的框架来降低开发的难度.
当前盛行的Spring MVC + Spring + Mybatis (以下简称SSM)[2]整合框架, 能更加便利、高效地开发出应用功能强大的Web应用, 同时SSM是一个典型的MVC框架, 整个系统被划分为表示层、控制层、服务层、和数据库访问层4层, 其中Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架. Spring MVC分离了控制器、模型对象、分派器以及处理程序对象的角色, 这种分离让它们更容易进行定制. MyBatis是一个支持普通SQL查询、存储过程和高级映射的优秀持久层框架[3, 4]. 在实际的开发过程中, 除了要考虑Web系统的功能强大, 系统的健壮性、易维护性等性能指标之外, 还要把用户与服务器的交互效率作为衡量指标来考虑. 本文以开发“城市供水管理系统”为例子, 来研究应用SSM与ExtJS整合架构开发Web应用平台的实现方法, 旨在构建出一个编写干净、便于管理、并且代码能更易于复用的多层应用平台.
1.1 Spring MVC框架
Spring MVC是Spring Frame Work所推出的后续产品, 是Spring框架基于MVC设计模型的用于构 建Web应用程序一个模块[4]. 而且Spring MVC的独立划分的特性可以使其项目更随心地进行定制. 在实际应用开发中, Spring MVC包含了JSP在内的大量视图技术, 可以灵活的定制. 对比Struts2, 两者的功能相似, 但是它们的原理不同. Struts2相当于是类级别的拦截, 一个类对应一个request上下文. 而Spring MVC相当于方法级别的拦截, 每一个方法对应一个request上下文, 同时方法又跟一个URL相匹配. Spring MVC的具体工作流程如图1所示.
(1) 用户一开始向服务器发送请求, Spring前端控制器DispatcherServlet会捕获请求;
(2) DispatcherServlet对请求过来的URL进行解析, 会得到请求的URI(统一资源标识符), 接着调用HandlerMapping获得到相关Handler配置的对象;
(3) DispatcherServlet 根据获得的Handler, 优先得到一个相应的HandlerAdapter;
(4) 提取Request请求中的相关数据, 填入到Handler入参, 然后开始执行Handler(Controller);
(5) Handler执行完成后, 会返回一个ModelAndView对象给DispatcherServlet;
(6) 根据返回的ModelAndView, 选择一个适合的ViewResolver返回给DispatcherServlet进行处理;
(7) ViewResolver结合ModelandView, 渲染视图;
(8) 将渲染结果返回给客户端.
1.2 Mybatis框架
Mybatis框架主要包括DAO组件与SQLMap组件两大类, mybatisDAO组件主要是把应用程序的数据访问层和持久层的表示位置和方式抽象化, 从而帮助开发人员基于DAO设计的模式进行设计[5]. SQL Map组件是mybatis框架的重要组成部分, 它通过通过配置xml或注解的方式将要执行的各种statement配置起来, 并通过java对象和statement中的sql进行映射生成最终执行的sql语句, 最后由mybatis框架执行sql并将结果映射成java对象并返回. 其工作流程图如图2所示.
1.3 Spring框架
Spring是为了解决企业级大型应用, 使用EJB开发繁琐度较高而推出的一款开源框架, 是当前非常轻量级面向切面(AOP)和控制反转(IOC)的容器框架[7]. Spring主要提供了面向切面编程, 核心的控制反转机制, 以及能够整合多种持久层的框架和拥有自己的MVC框架. Spring框架的目的是提供是JavaEE应用开发中各层的解决方案, 而不是其中的某一层. 如图3所示, Spring框架完成了表现层、业务层、持久层的资源整合, 但这并不意味着原来已有的框架能被Spring框架取代, 而是Spring框架能够实现已有框架的无缝整合, 为企业级应用开发提供更大的可能性.
我们首先将Mybatis与Spring进行整合, 由Spring管理Mybatis数据源的配置、事务的管理、SqlSession Factory的创建以及数据映射器接口Mapper的创建. 在业务层service实现是通过Spring注入的方式自动获取SqlSession以及对应的数据映射器接口Mapper, 所以mybatis-config.xml不需要再配置数据源及事务. 整合的代码如下:
第二步整合SpringMVC与Spring[8]. 由于SpringMVC本身就是Spring的一个模块, 所以只要单独写一个SpringMVC的配置文件, 然后在web.xml文件中配置即可. 配置代码如下:
3.1 系统模型
根据需求分析, 整个系统划分为七个子系统, 分别是人事管理系统、水类型管理系统等, 如图4所示.
图4系统的主界面
3.2 体系架构
JavaEE对于企业级开发进行了规范, 其中最核心思想就是组件与分层. 而分层主要有三个方面: 表示层、业务层、持久层. 在实际应用开发的过程中, 由于需求分析与设计分析, 常常需要拓展三层划分的体系结构, 通常的做法是把原来的三层体系划分变为四层体系划分, 新增一个服务层(DAO层)放在业务逻辑层与数据层之间. DAO层用于持久层的数据操作, 表示数据库的持久内存存储对象[9], 其开发体系架构图如图5所示.
3.3 系统实现
从系统的功能来看, 所有的操作、活动、管理都是以用户为核心的. 因此下面以用户信息管理为例子来叙述整个实现的流程.
3.3.1 数据持久层
首先, Mybatis要创建SqlSessionFactory实例, 它的作用相当于一个数据库连接池, 然后SqlSession Factory通过自定义配置的mapper.xml文件会构造一个SqlSession. 每个mapper.xml文件中一个SQL对应一个Mapped Statement对象, 这个对象包含了必要执行的SQL语句的方法, 执行之后会将输出结果映射至java对象中, 用完之后需要释放数据库连接资源.
3.3.2 服务层
数据访问是采用的DAO(数据访问对象)模式. 它是一个数据访问接口, 用来和数据库互动, 存在于业务逻辑与数据库资源的间隙, 可以从任何一种配置好的数据源处获取数据[10]. 使用服务层(DAO)可以降低业务逻辑代码和数据库访问代码之间的连接度. 这里以用户管理来举例, 要定义UserDAO接口, 其定义如下:
public interface ExampleDAO {
//根据id查询用户
public void findUserById(int id) throws Exception;
//根据id修改角色
public void modifyUserById(int id) throws Exception;
//添加角色
public void insertUser(User user) throws Exception;
//删除角色
public void deleteUser(int id) throws Exception;
}
紧接着定义其接口实现类UserDAoImpl, 在接口中实现DAO接口里面的方法, 比如实现根据id查询用户, 其实现如下:
public User findUserById(int id) throws Exception {
String res= "SqlMapConfig.xml";
InputStream is = Resources.getResourceAsStream(res);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = sqlSessionFactory.openSession();
User user = sqlSession.selectOne("test.findUserById", 1);
session.close();
return user;
}
最后在Mybatis的mapper.xml中配置如下代码:
3.3.3 控制层
在修改用户信息的时候, 由于涉及到用Form表单来存储User各个字段的信息, 所以需要构造一个UserForm类. 它本质上其实是一个JavaBean, 而且每一个属性都有自己的Getter()和Setter()方法, 通过Controller的函数参数列表写这个JavaBean对象, Spring框架会自动封装, 代码如下:
@Request Mapping (value ="/userInformation", method = RequestMethod.POST)
public String modifyUser(UserForm user userForm,HttpSession session,) throws Exception{
}
在web.xml的文件配置好请求的地址, DispatcherServlet会根据该请求的地址分配到开发人员所写的Controller类中的方法上. 通过@Controller注解注册所写的Controller类, 然后@RequestMapping注册请求的路径. 至此, 控制层的功能已经实现.
3.3.4 表示层
SprigMVC的前端控制器Dispatcher的BeanNameUrlHandlerMapping进行请求处理映射, 返回一个HandlerExecutionChain, 然后通过处理器适配为SimpleControllerHandlerAdapter. 接着分配到所写的Controller类中, 通过处理器功能处理方法的调用, SimpleControllerHandlerAdapter将会调用处理器的handleRequest方法进行功能处理. DispatcherServlet会得到返回的ModelAndView, 最后通过视图解析和视图渲染, 从而完成表示层[11].
本文主要是通过研究MVC的模式的三层结构体系, 结合SpringMVC、Mybatis、Spring的优点, 讨论了SSM框架的开发优势, 并以此完成了系统的实现, 从而降低了开发成本, 提高了代码的利用率和拓展性, 非常适用于主流的Web应用开发.
[1] 徐 雯, 高建华. 基于Spring MVC及MyBatis的Web应用框架研究[J]. 微型电脑应用, 2012, 28(7): 1~4
[2] Zhang D, Wei Z, Yang Y.[C]// Sixth International Symposium on Computational Intelligence and Design. IEEE Computer Society, 2013: 350~353
[3] 文欢欢, 刘振宇, 吴 霖. 基于Mybatis和JDBC的分页查询研究[J]. 电脑知识与技术, 2015, 11(25): 165~167
[4] Reddy K S P. Java Persistence with MyBatis 3[J]. 2013
[5] 陈 欣. 基于java三层构架的管理信息系统中DAO层的构建探索[J]. 科技资讯, 2015, 13(11): 26~27
[6] Woychowsky E.[M]. Prentice Hall Press, 2011
[7] 任 仁. 基于MVC模式的Struts和Spring框架的分析及整合[J]. 硅谷, 2008(21): 51~51.
[8] 李俊颉, 葛良全. 基于SSM的物流管理系统的实现[J]. 电子制作, 2015(4)
[9] 刘中兵. 开发者突击: JAVA WEB主流框架整合开发(J2EE+STRUTS+HIBERNATE+SPRING)[M]. 北京: 电子工业出版社, 2011
[10] 王 坤. 基于J2EE平台Spring MVC框架开发的MIS系统设计与实现[D]. 上海: 华东师范大学硕士学位论文, 2008
[11] 刘高军, 夏景隆. 基于Spring MVC和iBATIS框架的研究与应用[J]. 计算机安全, 2012(7): 25~30
Research and Implementation of Web System Based on SSM Framework
ZOU Hongting
(School of Information Technology, Guangdong Industry Polytechnic, Guangzhou 510627, China)
There are a lot of problems, such as low code reuse rate, high complexity and poor maintenance etc. in the heavy weight Web application based on EJB. This paper proposes architecture based on MVC, uses the lightweight SpringMVC+Spring+ Mybatis (SSM) to analyze its structure, composition and development advantages. Taking the construction of urban water supply system as an example, this paper shows that the SSM framework can improve the code reuse rate, system performance and so on.
Web application, SpringMVC, Spring, Mybatis, framework
TP311
A
1672-5298(2017)01-0039-05
2017-01-12
邹红霆(1965− ), 女, 湖南祁东人, 广东轻工业职业技术学院信息技术学院讲师. 主要研究方向: 计算机应用