干佳林 何貞銘 廖環(huán)宇
摘要:隨著JavaWeb應(yīng)用技術(shù)的發(fā)展,JavaWeb應(yīng)用框架應(yīng)運(yùn)而生,開(kāi)發(fā)者選擇合適的開(kāi)發(fā)框架將事半功倍。該文研究了JFinal和SSH(Struts2+Spring+Hibernate)兩種框架的構(gòu)成及特點(diǎn),分別介紹兩種技術(shù)在Web應(yīng)用中的開(kāi)發(fā)實(shí)例,并做出總結(jié)。該文充分展示了兩種框架技術(shù)的應(yīng)用特色,為開(kāi)發(fā)者選擇應(yīng)用開(kāi)發(fā)框架時(shí)提供了一定的參考依據(jù)。
關(guān)鍵詞:SSH;JFinal;JavaWeb;框架
中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2019)07-0081-02
開(kāi)放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
隨著JavaWeb技術(shù)的發(fā)展,開(kāi)發(fā)項(xiàng)目中所運(yùn)用的JavaWeb框架技術(shù)也層出不窮。開(kāi)發(fā)者使用框架的主要目的是[1]:實(shí)現(xiàn)業(yè)務(wù)模塊間的松耦合性、系統(tǒng)的擴(kuò)展性、代碼的重用性,從而達(dá)到開(kāi)發(fā)、維護(hù)的高效性。
JFinal于2011年初推出,是一種基于微內(nèi)核、全方位擴(kuò)展型架構(gòu),SSH是一種典型的J2EE三層結(jié)構(gòu)。前者在開(kāi)源社區(qū)備受矚目,后者是當(dāng)前Java Web中主流框架,將兩者進(jìn)行比較,對(duì)Java Web開(kāi)發(fā)者具有一定的參考價(jià)值。
1 Jfinal
1.1 JFinal介紹
JFinal是一款國(guó)產(chǎn)的、基于MVC+ORM的開(kāi)源JavaWeb框架[2],其設(shè)計(jì)目標(biāo)是開(kāi)發(fā)迅速、代碼量少、學(xué)習(xí)簡(jiǎn)單、功能強(qiáng)大、輕量級(jí)、易擴(kuò)展、Restful。在擁有Java語(yǔ)言所有優(yōu)勢(shì)的同時(shí),并擁有ruby、python、php等動(dòng)態(tài)語(yǔ)言的開(kāi)發(fā)效率。
1.2 JFinal的架構(gòu)及其特點(diǎn)
JFinal由Handler、Interceptor、Controller、Render、Plugin五大部分組成[3],每個(gè)部分都是基于接口實(shí)現(xiàn)的,支持完整的自定義,使用靈活,擴(kuò)展性強(qiáng)。JFinal總體架構(gòu)圖如圖1所示。
其中,JFinalFilter負(fù)責(zé)攔截客戶端請(qǐng)求,Handler是一個(gè)鏈條式調(diào)用,并對(duì)請(qǐng)求進(jìn)行詳細(xì)處理,Interceptor負(fù)責(zé)在Controller或方法執(zhí)行前執(zhí)行,Render負(fù)責(zé)視圖渲染。Plugin是JFinal的插件部分[4],提供了c3p0、Spring等第三方插件集成,同時(shí)支持用戶自定義集成插件。
JFinal框架采用MVC架構(gòu),設(shè)計(jì)精巧,使用簡(jiǎn)單;支持AOP[5],提供配置靈活功能強(qiáng)大的攔截器;同時(shí)遵循COC原則,無(wú)XML實(shí)現(xiàn)零配置等特點(diǎn)。其在開(kāi)發(fā)的每個(gè)階段都提供了大量的便捷性和支持。
2 SSH
2.1 SSH介紹
SSH是一種由Struts2、Spring、Hibernate三個(gè)框架組合的集成框架[6],是目前較流行的一種Web應(yīng)用程序開(kāi)源框架。集成SSH框架的系統(tǒng)從職責(zé)上分為三層:表示層、業(yè)務(wù)邏輯層、數(shù)據(jù)持久層,以幫助開(kāi)發(fā)人員在短期內(nèi)搭建結(jié)構(gòu)清晰、可復(fù)用性好、維護(hù)方便的Web應(yīng)用程序。
2.2 SSH的架構(gòu)及其特點(diǎn)
Struts2是一個(gè)基于MVC[7]設(shè)計(jì)模式的Web應(yīng)用框架。它本質(zhì)上相當(dāng)于一個(gè)servlet,在MVC設(shè)計(jì)模式中,Struts2作為控制器(Controller)來(lái)建立模型與視圖的數(shù)據(jù)交互。
Spring是一個(gè)輕量級(jí)控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架[8]。Spring可以將簡(jiǎn)單的組件配置、組合成為復(fù)雜的應(yīng)用。
Hibernate是一個(gè)開(kāi)放源代碼的對(duì)象關(guān)系映射框架[9],它對(duì)JDBC進(jìn)行了非常輕量級(jí)的對(duì)象封裝,它將POJO與數(shù)據(jù)庫(kù)表建立映射關(guān)系,是一個(gè)全自動(dòng)的ORM框架。
三者在整合框架中,各司其職。其中Struts2位于表現(xiàn)層,負(fù)責(zé)與用戶的交互和頁(yè)面邏輯的跳轉(zhuǎn);Spring位于業(yè)務(wù)邏輯層,負(fù)責(zé)管理業(yè)務(wù)邏輯處理對(duì)象;Hibernate位于數(shù)據(jù)訪問(wèn)層,負(fù)責(zé)數(shù)據(jù)庫(kù)的操作[10]。SSH整合架構(gòu)圖如圖2所示。
3 兩種框架在Web項(xiàng)目中的應(yīng)用
本節(jié)以管理員在博客中添加文章為功能需求,分別以兩者框架中Controller中部分代碼為例。
3.1 JFinal在Web應(yīng)用開(kāi)發(fā)實(shí)例
采用JFinal編寫(xiě)相關(guān)代碼,核心代碼如下:
@Before(AdminInterceptor.class)
publicclassArticleControllerextendsController{
// 添加
publicvoidadd() {
getModel(Article.class).save();
redirect("/article/list");
}
}
其中Controller是JFinal的核心類(lèi)之一[11],該類(lèi)作為MVC模式中的控制器,基于JFinal的Web應(yīng)用的控制器需要繼承該類(lèi)。該控制器執(zhí)行前,可在AdminInterceptor攔截器中進(jìn)行登錄權(quán)限校驗(yàn)等操作。getModel用來(lái)接收頁(yè)面表單域傳遞過(guò)來(lái)的model對(duì)象,該model對(duì)象與Article實(shí)體類(lèi)相對(duì)應(yīng),實(shí)現(xiàn)數(shù)據(jù)傳參和入庫(kù)操作規(guī)范化和簡(jiǎn)單化。
3.2 SSH在Web應(yīng)用開(kāi)發(fā)實(shí)例
結(jié)合上文提到的實(shí)例,采用SSH框架編寫(xiě)相關(guān)代碼,核心代碼如下:
@SessionAttributes(value = "article")
@Controller
//使用該注解標(biāo)志它是一個(gè)控制器
@RequestMapping(value = "/article")
public class ArticleController {
@Autowired
publicArticleServicearticleService;
@RequestMapping(value = "/add")
PublicModelAndViewaddArticle(ModelMap mm, Article article){
ModelAndViewmav = new ModelAndView("/article"); articleService.addArticle(article);
mav.addObject("article", articleService.getArticles());
returnmav;
}
}
SSH框架一般把代碼分為Controller、Service、Dao、Entity四層。其中,Controller層完成前端控制器解析處理的URI;Service層負(fù)責(zé)業(yè)務(wù)處理層,提供控制層調(diào)用接口的抽象方法及其實(shí)現(xiàn);Dao層提供與數(shù)據(jù)庫(kù)交互的方法,及其相關(guān)的SQL語(yǔ)句;Entity層與數(shù)據(jù)庫(kù)表進(jìn)行映射,并提供get和set方法。
3.3兩種框架在JavaWeb項(xiàng)目中的開(kāi)發(fā)總結(jié)
JFinal與SSH兩者都有各自的特點(diǎn),如何進(jìn)行取舍,取決于項(xiàng)目實(shí)際情況。以下從客觀的角度,將JFinal與SSH進(jìn)行對(duì)比,如表1所示。
從開(kāi)發(fā)環(huán)境配置方面比較,JFinal比SSH配置相對(duì)復(fù)雜,同時(shí)后者需要考慮不同jar包版本之間的兼容性問(wèn)題。從開(kāi)發(fā)工作量方面比較,JFinal開(kāi)發(fā)工作量相對(duì)較少。從擴(kuò)展性和維護(hù)性比較,SSH通過(guò)控制反轉(zhuǎn)和面向切面編程技術(shù),解決代碼間的耦合,相對(duì)JFinal具有優(yōu)勢(shì)。
4 結(jié)束語(yǔ)
本文主要簡(jiǎn)單闡述了JFinal和SSH兩種開(kāi)源框架及其特點(diǎn),并結(jié)合實(shí)例分別介紹兩種框架下的開(kāi)發(fā)步驟,最后,針對(duì)兩種框架下的開(kāi)發(fā)進(jìn)行總結(jié)。對(duì)于個(gè)人學(xué)習(xí)JavaWeb框架入門(mén)或者小型項(xiàng)目,JFinal是個(gè)不錯(cuò)的選擇,但是對(duì)于擴(kuò)展性、靈活性要求較高的項(xiàng)目,則應(yīng)當(dāng)選擇SSH框架。
參考文獻(xiàn):
[1] 周偉. 計(jì)算機(jī)JavaWeb軟件MVC設(shè)計(jì)模式的研究與實(shí)現(xiàn)[J]. 電腦迷, 2016(12): 33, 57.
[2] 蘇小平. 基于Jfinal+Shiro框架的Web應(yīng)用系統(tǒng)開(kāi)發(fā)研究[J]. 電腦知識(shí)與技術(shù), 2016, 12(30): 68-70.
[3] 楊寧,劉丹軍. 基于JFinal框架的Java Web應(yīng)用開(kāi)發(fā)研究[J]. 電腦知識(shí)與技術(shù), 2014, 10(7): 1440-1443.
[4] 歐陽(yáng)宏基,于博,葛萌. 基于JFinal框架的Java EE應(yīng)用研究[J]. 微處理機(jī), 2017(4): 45-50.
[5] 肖榮,張?jiān)迫A. 基于AOP和反射計(jì)算的動(dòng)態(tài)自適應(yīng)中間件[J]. 計(jì)算機(jī)系統(tǒng)應(yīng)用, 2010, 19(1): 21, 58-62.
[6] 譚呈祥. 基于Struts2+Hibernate+Spring的就業(yè)信息管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J]. 電腦迷, 2018(4): 87-88.
[7] 張雪敏. 淺議MVC設(shè)計(jì)模式在JavaWeb中的作用[J]. 科技風(fēng), 2018(22): 58-59.
[8] 黃俊勇. 基于Spring框架的研究與設(shè)計(jì)[J]. 電腦知識(shí)與技術(shù), 2018, 14(3): 116-117, 120.
[9] 楊國(guó)勛. Java Web應(yīng)用框架研究與應(yīng)用[J]. 科技傳播, 2017, 9(21): 90-91.
[10] 高進(jìn). Java Web中的Java SSH框架分析[J]. 科技風(fēng), 2018(23): 48.
[11] 趙璘,王紅霞. JFinal與Spring MVC+JDBCTemplate在Web應(yīng)用開(kāi)發(fā)中的研究[J]. 電子元器件與信息技術(shù), 2017, 1(1): 13-23.
【通聯(lián)編輯:代影】