国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于SSM框架的Web系統(tǒng)研究與應(yīng)用

2017-03-09 16:38鄒紅霆
關(guān)鍵詞:企業(yè)級(jí)視圖代碼

鄒紅霆

?

基于SSM框架的Web系統(tǒng)研究與應(yīng)用

鄒紅霆

(廣東輕工業(yè)職業(yè)技術(shù)學(xué)院信息技術(shù)學(xué)院, 廣州 510627 )

基于EJB等的重量級(jí)的Web應(yīng)用存在著很多問(wèn)題, 如代碼復(fù)用率低、復(fù)雜程度高、維護(hù)性差. 本文提出了一種新的基于MVC結(jié)構(gòu), 使用輕量級(jí)的SpringMVC+Spring+Mybatis(SSM)開(kāi)發(fā)框架, 并且對(duì)其結(jié)構(gòu)整合、組成、開(kāi)發(fā)優(yōu)點(diǎn)等進(jìn)行了探究, 并以構(gòu)建城市供水業(yè)務(wù)系統(tǒng)為例子, 說(shuō)明了SSM框架在實(shí)際開(kāi)發(fā)中, 能提高代碼的復(fù)用率、系統(tǒng)的性能等.

Web應(yīng)用; SpringMVC; Spring; Mybatis; 框架

引言

目前, 國(guó)內(nèi)外有很多開(kāi)發(fā)Web應(yīng)用的技術(shù), 其中廣為人知的就有Sun及IBM公司提出的JavaEE平臺(tái)和微軟(Microsoft)公司的. Net平臺(tái). 由于JavaEE相較于.Net平臺(tái)是可移植、跨平臺(tái)、開(kāi)源的, 所以企業(yè)級(jí)開(kāi)發(fā)往往都是選擇基于JavaEE平臺(tái)的設(shè)計(jì)和解決方案[1]. 而傳統(tǒng)的EJB(Enterprise Java Bean)是JavaEE的核心, 因其代碼復(fù)雜, 維護(hù)困難, 逐漸在企業(yè)級(jí)開(kāi)發(fā)中被淘汰. 因此, 需要一個(gè)更加輕量級(jí)的框架來(lái)降低開(kāi)發(fā)的難度.

當(dāng)前盛行的Spring MVC + Spring + Mybatis (以下簡(jiǎn)稱(chēng)SSM)[2]整合框架, 能更加便利、高效地開(kāi)發(fā)出應(yīng)用功能強(qiáng)大的Web應(yīng)用, 同時(shí)SSM是一個(gè)典型的MVC框架, 整個(gè)系統(tǒng)被劃分為表示層、控制層、服務(wù)層、和數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)層4層, 其中Spring是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(IOC)和面向切面(AOP)的容器框架. Spring MVC分離了控制器、模型對(duì)象、分派器以及處理程序?qū)ο蟮慕巧? 這種分離讓它們更容易進(jìn)行定制. MyBatis是一個(gè)支持普通SQL查詢(xún)、存儲(chǔ)過(guò)程和高級(jí)映射的優(yōu)秀持久層框架[3, 4]. 在實(shí)際的開(kāi)發(fā)過(guò)程中, 除了要考慮Web系統(tǒng)的功能強(qiáng)大, 系統(tǒng)的健壯性、易維護(hù)性等性能指標(biāo)之外, 還要把用戶(hù)與服務(wù)器的交互效率作為衡量指標(biāo)來(lái)考慮. 本文以開(kāi)發(fā)“城市供水管理系統(tǒng)”為例子, 來(lái)研究應(yīng)用SSM與ExtJS整合架構(gòu)開(kāi)發(fā)Web應(yīng)用平臺(tái)的實(shí)現(xiàn)方法, 旨在構(gòu)建出一個(gè)編寫(xiě)干凈、便于管理、并且代碼能更易于復(fù)用的多層應(yīng)用平臺(tái).

1 SSM架構(gòu)技術(shù)

1.1 Spring MVC框架

Spring MVC是Spring Frame Work所推出的后續(xù)產(chǎn)品, 是Spring框架基于MVC設(shè)計(jì)模型的用于構(gòu) 建Web應(yīng)用程序一個(gè)模塊[4]. 而且Spring MVC的獨(dú)立劃分的特性可以使其項(xiàng)目更隨心地進(jìn)行定制. 在實(shí)際應(yīng)用開(kāi)發(fā)中, Spring MVC包含了JSP在內(nèi)的大量視圖技術(shù), 可以靈活的定制. 對(duì)比Struts2, 兩者的功能相似, 但是它們的原理不同. Struts2相當(dāng)于是類(lèi)級(jí)別的攔截, 一個(gè)類(lèi)對(duì)應(yīng)一個(gè)request上下文. 而Spring MVC相當(dāng)于方法級(jí)別的攔截, 每一個(gè)方法對(duì)應(yīng)一個(gè)request上下文, 同時(shí)方法又跟一個(gè)URL相匹配. Spring MVC的具體工作流程如圖1所示.

(1) 用戶(hù)一開(kāi)始向服務(wù)器發(fā)送請(qǐng)求, Spring前端控制器DispatcherServlet會(huì)捕獲請(qǐng)求;

(2) DispatcherServlet對(duì)請(qǐng)求過(guò)來(lái)的URL進(jìn)行解析, 會(huì)得到請(qǐng)求的URI(統(tǒng)一資源標(biāo)識(shí)符), 接著調(diào)用HandlerMapping獲得到相關(guān)Handler配置的對(duì)象;

(3) DispatcherServlet 根據(jù)獲得的Handler, 優(yōu)先得到一個(gè)相應(yīng)的HandlerAdapter;

(4) 提取Request請(qǐng)求中的相關(guān)數(shù)據(jù), 填入到Handler入?yún)? 然后開(kāi)始執(zhí)行Handler(Controller);

(5) Handler執(zhí)行完成后, 會(huì)返回一個(gè)ModelAndView對(duì)象給DispatcherServlet;

(6) 根據(jù)返回的ModelAndView, 選擇一個(gè)適合的ViewResolver返回給DispatcherServlet進(jìn)行處理;

(7) ViewResolver結(jié)合ModelandView, 渲染視圖;

(8) 將渲染結(jié)果返回給客戶(hù)端.

1.2 Mybatis框架

Mybatis框架主要包括DAO組件與SQLMap組件兩大類(lèi), mybatisDAO組件主要是把應(yīng)用程序的數(shù)據(jù)訪(fǎng)問(wèn)層和持久層的表示位置和方式抽象化, 從而幫助開(kāi)發(fā)人員基于DAO設(shè)計(jì)的模式進(jìn)行設(shè)計(jì)[5]. SQL Map組件是mybatis框架的重要組成部分, 它通過(guò)通過(guò)配置xml或注解的方式將要執(zhí)行的各種statement配置起來(lái), 并通過(guò)java對(duì)象和statement中的sql進(jìn)行映射生成最終執(zhí)行的sql語(yǔ)句, 最后由mybatis框架執(zhí)行sql并將結(jié)果映射成java對(duì)象并返回. 其工作流程圖如圖2所示.

1.3 Spring框架

Spring是為了解決企業(yè)級(jí)大型應(yīng)用, 使用EJB開(kāi)發(fā)繁瑣度較高而推出的一款開(kāi)源框架, 是當(dāng)前非常輕量級(jí)面向切面(AOP)和控制反轉(zhuǎn)(IOC)的容器框架[7]. Spring主要提供了面向切面編程, 核心的控制反轉(zhuǎn)機(jī)制, 以及能夠整合多種持久層的框架和擁有自己的MVC框架. Spring框架的目的是提供是JavaEE應(yīng)用開(kāi)發(fā)中各層的解決方案, 而不是其中的某一層. 如圖3所示, Spring框架完成了表現(xiàn)層、業(yè)務(wù)層、持久層的資源整合, 但這并不意味著原來(lái)已有的框架能被Spring框架取代, 而是Spring框架能夠?qū)崿F(xiàn)已有框架的無(wú)縫整合, 為企業(yè)級(jí)應(yīng)用開(kāi)發(fā)提供更大的可能性.

2 SSM框架整合

我們首先將Mybatis與Spring進(jìn)行整合, 由Spring管理Mybatis數(shù)據(jù)源的配置、事務(wù)的管理、SqlSession Factory的創(chuàng)建以及數(shù)據(jù)映射器接口Mapper的創(chuàng)建. 在業(yè)務(wù)層service實(shí)現(xiàn)是通過(guò)Spring注入的方式自動(dòng)獲取SqlSession以及對(duì)應(yīng)的數(shù)據(jù)映射器接口Mapper, 所以mybatis-config.xml不需要再配置數(shù)據(jù)源及事務(wù). 整合的代碼如下:

第二步整合SpringMVC與Spring[8]. 由于SpringMVC本身就是Spring的一個(gè)模塊, 所以只要單獨(dú)寫(xiě)一個(gè)SpringMVC的配置文件, 然后在web.xml文件中配置即可. 配置代碼如下:

spring

org.springframework.web.servlet.DispatcherServlet

1

spring

/

3 城市供水管理系統(tǒng)的實(shí)現(xiàn)

3.1 系統(tǒng)模型

根據(jù)需求分析, 整個(gè)系統(tǒng)劃分為七個(gè)子系統(tǒng), 分別是人事管理系統(tǒng)、水類(lèi)型管理系統(tǒng)等, 如圖4所示.

圖4系統(tǒng)的主界面

3.2 體系架構(gòu)

JavaEE對(duì)于企業(yè)級(jí)開(kāi)發(fā)進(jìn)行了規(guī)范, 其中最核心思想就是組件與分層. 而分層主要有三個(gè)方面: 表示層、業(yè)務(wù)層、持久層. 在實(shí)際應(yīng)用開(kāi)發(fā)的過(guò)程中, 由于需求分析與設(shè)計(jì)分析, 常常需要拓展三層劃分的體系結(jié)構(gòu), 通常的做法是把原來(lái)的三層體系劃分變?yōu)樗膶芋w系劃分, 新增一個(gè)服務(wù)層(DAO層)放在業(yè)務(wù)邏輯層與數(shù)據(jù)層之間. DAO層用于持久層的數(shù)據(jù)操作, 表示數(shù)據(jù)庫(kù)的持久內(nèi)存存儲(chǔ)對(duì)象[9], 其開(kāi)發(fā)體系架構(gòu)圖如圖5所示.

3.3 系統(tǒng)實(shí)現(xiàn)

從系統(tǒng)的功能來(lái)看, 所有的操作、活動(dòng)、管理都是以用戶(hù)為核心的. 因此下面以用戶(hù)信息管理為例子來(lái)敘述整個(gè)實(shí)現(xiàn)的流程.

3.3.1 數(shù)據(jù)持久層

首先, Mybatis要?jiǎng)?chuàng)建SqlSessionFactory實(shí)例, 它的作用相當(dāng)于一個(gè)數(shù)據(jù)庫(kù)連接池, 然后SqlSession Factory通過(guò)自定義配置的mapper.xml文件會(huì)構(gòu)造一個(gè)SqlSession. 每個(gè)mapper.xml文件中一個(gè)SQL對(duì)應(yīng)一個(gè)Mapped Statement對(duì)象, 這個(gè)對(duì)象包含了必要執(zhí)行的SQL語(yǔ)句的方法, 執(zhí)行之后會(huì)將輸出結(jié)果映射至java對(duì)象中, 用完之后需要釋放數(shù)據(jù)庫(kù)連接資源.

3.3.2 服務(wù)層

數(shù)據(jù)訪(fǎng)問(wèn)是采用的DAO(數(shù)據(jù)訪(fǎng)問(wèn)對(duì)象)模式. 它是一個(gè)數(shù)據(jù)訪(fǎng)問(wèn)接口, 用來(lái)和數(shù)據(jù)庫(kù)互動(dòng), 存在于業(yè)務(wù)邏輯與數(shù)據(jù)庫(kù)資源的間隙, 可以從任何一種配置好的數(shù)據(jù)源處獲取數(shù)據(jù)[10]. 使用服務(wù)層(DAO)可以降低業(yè)務(wù)邏輯代碼和數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)代碼之間的連接度. 這里以用戶(hù)管理來(lái)舉例, 要定義UserDAO接口, 其定義如下:

public interface ExampleDAO {

//根據(jù)id查詢(xún)用戶(hù)

public void findUserById(int id) throws Exception;

//根據(jù)id修改角色

public void modifyUserById(int id) throws Exception;

//添加角色

public void insertUser(User user) throws Exception;

//刪除角色

public void deleteUser(int id) throws Exception;

}

緊接著定義其接口實(shí)現(xiàn)類(lèi)UserDAoImpl, 在接口中實(shí)現(xiàn)DAO接口里面的方法, 比如實(shí)現(xiàn)根據(jù)id查詢(xún)用戶(hù), 其實(shí)現(xiàn)如下:

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 控制層

在修改用戶(hù)信息的時(shí)候, 由于涉及到用Form表單來(lái)存儲(chǔ)User各個(gè)字段的信息, 所以需要構(gòu)造一個(gè)UserForm類(lèi). 它本質(zhì)上其實(shí)是一個(gè)JavaBean, 而且每一個(gè)屬性都有自己的Getter()和Setter()方法, 通過(guò)Controller的函數(shù)參數(shù)列表寫(xiě)這個(gè)JavaBean對(duì)象, Spring框架會(huì)自動(dòng)封裝, 代碼如下:

@Request Mapping (value ="/userInformation", method = RequestMethod.POST)

public String modifyUser(UserForm user userForm,HttpSession session,) throws Exception{

}

在web.xml的文件配置好請(qǐng)求的地址, DispatcherServlet會(huì)根據(jù)該請(qǐng)求的地址分配到開(kāi)發(fā)人員所寫(xiě)的Controller類(lèi)中的方法上. 通過(guò)@Controller注解注冊(cè)所寫(xiě)的Controller類(lèi), 然后@RequestMapping注冊(cè)請(qǐng)求的路徑. 至此, 控制層的功能已經(jīng)實(shí)現(xiàn).

3.3.4 表示層

SprigMVC的前端控制器Dispatcher的BeanNameUrlHandlerMapping進(jìn)行請(qǐng)求處理映射, 返回一個(gè)HandlerExecutionChain, 然后通過(guò)處理器適配為SimpleControllerHandlerAdapter. 接著分配到所寫(xiě)的Controller類(lèi)中, 通過(guò)處理器功能處理方法的調(diào)用, SimpleControllerHandlerAdapter將會(huì)調(diào)用處理器的handleRequest方法進(jìn)行功能處理. DispatcherServlet會(huì)得到返回的ModelAndView, 最后通過(guò)視圖解析和視圖渲染, 從而完成表示層[11].

4 結(jié)束語(yǔ)

本文主要是通過(guò)研究MVC的模式的三層結(jié)構(gòu)體系, 結(jié)合SpringMVC、Mybatis、Spring的優(yōu)點(diǎn), 討論了SSM框架的開(kāi)發(fā)優(yōu)勢(shì), 并以此完成了系統(tǒng)的實(shí)現(xiàn), 從而降低了開(kāi)發(fā)成本, 提高了代碼的利用率和拓展性, 非常適用于主流的Web應(yīng)用開(kāi)發(fā).

[1] 徐 雯, 高建華. 基于Spring MVC及MyBatis的Web應(yīng)用框架研究[J]. 微型電腦應(yīng)用, 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的分頁(yè)查詢(xún)研究[J]. 電腦知識(shí)與技術(shù), 2015, 11(25): 165~167

[4] Reddy K S P. Java Persistence with MyBatis 3[J]. 2013

[5] 陳 欣. 基于java三層構(gòu)架的管理信息系統(tǒng)中DAO層的構(gòu)建探索[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的物流管理系統(tǒng)的實(shí)現(xiàn)[J]. 電子制作, 2015(4)

[9] 劉中兵. 開(kāi)發(fā)者突擊: JAVA WEB主流框架整合開(kāi)發(fā)(J2EE+STRUTS+HIBERNATE+SPRING)[M]. 北京: 電子工業(yè)出版社, 2011

[10] 王 坤. 基于J2EE平臺(tái)Spring MVC框架開(kāi)發(fā)的MIS系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D]. 上海: 華東師范大學(xué)碩士學(xué)位論文, 2008

[11] 劉高軍, 夏景隆. 基于Spring MVC和iBATIS框架的研究與應(yīng)用[J]. 計(jì)算機(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? ), 女, 湖南祁東人, 廣東輕工業(yè)職業(yè)技術(shù)學(xué)院信息技術(shù)學(xué)院講師. 主要研究方向: 計(jì)算機(jī)應(yīng)用

猜你喜歡
企業(yè)級(jí)視圖代碼
企業(yè)級(jí)BOM數(shù)據(jù)管理概要
區(qū)塊鏈金融場(chǎng)景應(yīng)用分析及企業(yè)級(jí)架構(gòu)探討
創(chuàng)世代碼
創(chuàng)世代碼
創(chuàng)世代碼
創(chuàng)世代碼
5.3 視圖與投影
視圖
Y—20重型運(yùn)輸機(jī)多視圖
SA2型76毫米車(chē)載高炮多視圖
宝清县| 甘孜县| 蒙山县| 岑溪市| 泉州市| 玛纳斯县| 商水县| 津南区| 从江县| 彭水| 化德县| 广元市| 元谋县| 塔城市| 宝山区| 贵溪市| 仙游县| 抚松县| 连云港市| 大丰市| 曲阜市| 当阳市| 新化县| 海宁市| 兴文县| 凤城市| 晋宁县| 荆门市| 应用必备| 文山县| 青浦区| 大关县| 南宫市| 镶黄旗| 武川县| 保德县| 那坡县| 喜德县| 鹤壁市| 卢氏县| 温州市|