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