李 洋
(南京郵電大學 通信與信息工程學院,江蘇 南京 210000)
SSM框架在Web應用開發中的設計與實現
李 洋
(南京郵電大學 通信與信息工程學院,江蘇 南京 210000)
在Web應用的開發過程中,開發框架的選擇非常重要。一個好的開發框架能夠加速Web應用的開發速度,降低開發成本,減少開發人員的工作量,同時能夠使Web應用具有良好的擴展性和移植性。基于SpringMVC+Spring+Mybatis(SSM)的框架憑借良好的性能和較快的開發效率,逐漸成為主流的Web應用開發框架組合。SpringMVC是一個基于MVC的框架,其主要負責表現層的功能,比如響應請求。Spring框架主要起到容器的功能,整合了SpringMVC和Mybatis,實現層與層之間的解耦,同時使業務邏輯更加清晰。Mybatis框架主要負責的是數據持久層,完成和數據庫的相關操作。重點以權限管理模塊為例,說明了SSM框架在開發后臺管理系統中的應用,為開發后臺管理系統提供了理論指導。
SpringMVC;Spring;Mybatis;Web應用;框架
目前,國內外有很多的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網站的開發速度。
MVC(Model-View-Controller,即模型-視圖-控制器[3])是Web開發中的一種設計模式。圖1顯示了這三種組件的聯系和功能的分工。

圖1 MVC組件類型的關系與功能
在這種設計模式中,模型(Model)、視圖(View)、控制器(Controller)分別履行不同的職責。Model主要實現業務的邏輯處理,業務規則的制定,包括數據庫的訪問。因此業務模型的設計是MVC設計模式中最重要的部分。View是根據模型數據創建的,用戶能看到并且能與之交互。View通常是采集用戶數據的輸入,響應用戶的請求。Controller通過讀取視圖中用戶輸入的數據,根據用戶輸入的數據選擇合適的模型處理用戶請求,并且選擇合適的視圖來展示模型處理結果。Controller并不參與數據的處理,而是將數據的處理交給Model執行。可見,MVC設計模式實現的業務處理和視圖展示的分離,降低了每個模塊之間的耦合度,達到了系統的設計目標和整體要求。
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)通過異常處理解析器解析執行過程中遇到的異常。
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通過動態代理,實現將多個系統級服務(例如日志、事務等)的行為封裝到可重用的模塊中,用來實現業務邏輯和系統級服務的松耦合。
非侵入式:侵入式設計表現為客戶端程序需要繼承框架中的類,而非侵入式設計則表現為客戶端實現框架提供的接口,這樣就減少了應用程序對框架的依賴,以及框架移植時的負擔,提高了應用程序組件的復用性。
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.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配置文件中添加如下配置即可。
SELECT * FROM ROLE WHERE id=#{value}
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文件。
文中結合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