999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于JFinal框架的Java EE應用研究*

2017-09-11 13:51:56歐陽宏基于博葛萌
微處理機 2017年4期
關鍵詞:定義數據庫方法

歐陽宏基,于博,葛萌

(1.咸陽師范學院計算機學院,咸陽712000;2.河南建筑職業技術學院信息工程系,鄭州450064)

基于JFinal框架的Java EE應用研究*

歐陽宏基1,于博2,葛萌1

(1.咸陽師范學院計算機學院,咸陽712000;2.河南建筑職業技術學院信息工程系,鄭州450064)

基于S2SH框架的Java EE應用存在著配置繁瑣、編碼工作量大、體積龐大、對第三方jar依賴較多等問題,為此,提出一種基于JFinal框架的Java EE開發方法。首先對JFinal框架的體系結構和執行流程進行了詳細描述。然后,結合部分示例代碼從模型、視圖、控制器三個方面給出了JFinal框架的具體實現過程。最后,將Final框架與S2SH框架進行了全方位對比分析。結果表明:基于JFinal框架的Java EE開發方法能夠極大的提高開發效率,同時具有良好的穩定性和擴展性。

JFinal框架;S2SH框架;Java EE應用;極速開發;MVC模式

1 引言

隨著Java技術與互聯網的快速發展,Java EE應用經歷了從JSP+Servlet+JavaBean[1]的開發方案到以MVC設計模[2]+框架的開發方案的轉變,前者適合于小型規模的Java Web應用,后者適合于大型企業級應用。在以框架為基礎的開發方案中,以Struts、Spring、Hibernate、Mybatis等框架應用最具代表性,目前的主要研究集中在分析框架的構成、通過框架之間的集成進行系統開發、測試并驗證框架的性能等方面[3]。

文獻[4]提出一種基于Struts1與Hibernate框架集成的開發方案,主要是通過Struts1實現控制邏輯,在Action組件中通過DAO模式調用Hibernate API來訪問數據庫,從而解決了系統耦合度高、JDBC訪問數據庫復雜等問題。文獻[5]提出一種基于SSH(Struts+Spring+Hibernate)框架的Web開發方法,并應用到EPON性能監控管理系統的開發中,通過實驗測試證明了該方法的可靠性和穩定性。文獻[6]提出整合Spring與Ibatis框架的Web開發方案,并應用到信用卡業務系統的開發中,證明了該方案的穩定性和維護性。雖然上述基于各種框架的Java Web開發方案都具有很好的穩定性和擴展性等,但是都存在著兩個方面的缺點:①每個框架都只在某個方面具有優勢(例如Struts的優勢是控制邏輯),相互之間需要整合來完成整體的開發,學習成本較高、不易上手;②每個框架都需要配置文件的支持才能運行,而且層與層之間需要域模型對象的支持才能傳遞數據,系統越復雜,配置文件和域模型對象越多,必然會導致開發效率的下降。

針對上述問題,提出一種基于JFinal框架的Java EE開發方法,該方法具有以下優點:①能夠極大減少代碼量,無需配置文件和各種域模型對象;②基于MVC架構,支持AOP編程,擁有Struts2的絕大部分功能[7];③基于Plugin體系結構,易于擴展。

2 JFinal框架

JFinal是一款國產的、基于MVC+ORM的開源Java Web框架。它遵循Apache 2.0協議,其設計目的是以盡可能少的代碼量來獲得穩定、易于擴展、可復用的Java EE應用。JFinal框架不但具備S2SH等主流框架所提供的功能,而且還擁有Ruby、Python等動態語言的開發效率[8-9]。

2.1 JFinal框架體系結構

JFinal框架的體系結構如圖1所示,它由Handler、Interceptor、Controller、Render、Plugin 五大部分組成[10]。每個部分都是基于接口實現,支持完整的自定義,擴展性強,使用靈活,彼此獨立同時又互相協助。

圖1 JFinal框架體系結構

Handler是請求處理器,完成對所有請求的公共處理。它的本質是AOP+責任鏈模式的變種[11],由初始配置的Handler和框架默認的ActionHandler一起構成一條鏈,依次執行。可通過Handler完成Java EE應用的權限、安全驗證等功能。Interceptor是JFinal AOP的實現方式,通過實現Interceptor接口以及使用@Before annotation可以細粒度地進行配置。Interceptor并非線程安全的,線程安全攔截器需要繼PrototypeInterceptor來實現。Controller充當MVC模式中的控制器,對HttpServletRequest和HttpServletResponse進行了封裝,是線程安全的。主要包括三大方面的功能:(1)提供了一系列的獲取、設置屬性的方法以及重定向的方法;(2)用來定義Action,Controller以及在其中定義的public無參方法就是一個Action;(3)提供了一系列的Render方法來渲染視圖返回給客戶端。Render是渲染器,負責將服務器端的數據組裝成不同的視圖類型并返回給客戶端。JFinal目前支持的視圖類型有:FreeMarker、JSP、Velocity、JSON、File、Text、Html 以 及 通 過 繼 承Render抽象類來實現的自定義視圖類型。PlugIn是JFinal的插件部分,目前提供了與druid、ehcache、c3p0、Spring等第三方插件的集成,同時支持與用戶自定義插件的集成。

2.2 JFinal框架的執行流程

JFinal框架的執行流程如下:

(1)客戶端提交一個請求,請求中包含了服務器端處理該請求的URI;

(2)所有請求會被JFinalFilter攔截,然后調用Handler進行詳細處理;

(3)Handler是一個鏈條式的調用,其中包含了0到N個用戶自定義的Handler,鏈條的末端是ActionHandler;

(4)進入ActionHandler后,首先根據請求從緩存的ActionMapping中獲取到具體處理請求的Action對象,再通過Action對象找到所在的Controller,然后根據Action和Controller構造出Action-Invoker對象;

(5)調用ActionInvocation的invoke進行具體處理,首先是攔截器的調用,攔截器調用中會重新回調ActionInvocation的invoke方法,攔截器調用完畢后,會調用當前操作的method方法;

(6)當進入具體controller的新增方法時,調用父類的getModel方法,從request中解析出所需要的數據,通過反射設定給具體的Model實體類,最終通過ActiveRecord來進行數據存儲;

(7)最后通過頁面渲染render調用相應的視圖,響應本次請求。

3 基于JFinal的Java EE應用構建

由于JFinal是基于MVC模式的一體化開發框架,所以構建于JFinal之上的Java EE應用主要實現三個方面的內容:①完成控制器部分的定義,包括實體類對應的Controller、Interceptor攔截器和具體的Action方法;②模型部分的定義,根據系統功能分析,建立Model模型和數據庫的訪問工具;③選擇合適的視圖類型響應客戶端請求。基于JFinal的Java EE應用系統框架如圖2所示。

圖2 基于JFinal框架的Java EE架構

3.1 創建JFinal配置類

JFinal采用了API引導式的配置方式,通過繼承JFinalConfig類來定義Web應用的各種組件。JFinalConfig提供了5個抽象方法分別從常量、路由、插件、攔截器和處理器等方面對系統進行全面配置。其中,(1)void configConstant(Constants me),該方法用于配置JFinal常量,例如開發模式常量的配置、默認視圖類型的配置等。(2)void configRoute(Routes me),該方法配置JFinal訪問路由,用來將一個URL定位到某個Action。(3)void configPlugin(Plugins me),該方法用來配置JFinal的插件,例如數據庫連接池和ActiveRecord數據訪問工具等。(4)void configIntercpetor(Interceptor me),該方法用來配置攔截器,在此處配置的攔截器屬于全局范圍。(5)void configHandler(Handlers me),該方法用來配置Handler,Handler可以接管所有web請求,并對應用擁有完全的控制權,可以很方便地實現更高層的功能性擴展。

3.2 定義攔截器

JFinal采用AOP方式實現攔截器,通過實現Interceptor接口來定義具體的攔截器。攔截器配置共分為:Global、Controller和 Action等三個級別。Global級攔截器通過JFinalConfig.configInterceptor(Interceptors me)方法進行配置,對所有Action進行攔截;Controller級攔截器使用注解@Before annotation在Controller類定義前進行配置,對當前Controller中的所有Action進行攔截;Action級攔截器使用注解@Before annotation在Action定義前進行配置,僅對該Action進行攔截。以下是用戶權限攔截器的相關代碼:

實現思路是從Session中獲取當前登錄用戶信息,并且判斷該用戶能否訪問某個具體的Action。如果用戶沒有登錄或者不具備訪問某個Action的權限,對該請求進行攔截并定位到登錄頁面。該攔截器是全局級別的,在2.1節的configIntercpetor(Interceptor me)方法中進行配置。

3.3 定義Controller

Controller是JFinal核心類之一,作為MVC模式中的控制器。具體開發中通過定義Controller的子類來實現控制器,定義若干Action來執行業務邏輯。

3.4 創建ActiveRecordPlugin

JFinal框架采用了ActiveRecord模式進行數據庫的ORM操作。ActiveRecordPulgIn是JFinal框架提供的實現ActiveRecord模式的組件,該組件主要完成配置數據源、設定開發模式與數據庫方言、建立數據庫表與Model映射關系等方面的任務。

利用ActiveRecordPlugin訪問數據庫主要通過三個步驟來實現:首先創建數據源并賦值給ActiveRecordePlugin對象。因為ActiveRecordePlugin封裝了IDataSourceProvider接口用來表示數據源,C3p0Plugin是對C3P0數據庫連接池進行封裝的插件并實現了IDataSourceProvider接口,因此該對象就可以看作是一個數據源的實現。然后在數據庫表與模型類之間建立映射關系,具體是通過ActiveRecordPluin的addMapping(String tableName,String primaryKey,ClassmodelClass>)方法來完成的。其中第一個參數為數據庫表名稱,第二個參數為表的主鍵名稱 (如果為id可以省略該參數),第三個參數為模型類。最后將ActiveRecordPulgin對象進行配置。因為ActiveRecord是以插件形式存在的,在Web中應用就需要在JFinalConfig中進行配置。以下是部分配置源碼:

通過上述代碼可以看出,通過ActiveRecord訪問數據庫無需為模型類單獨建立任何配置文件,即使模型類發生改變,以上代碼也無需任何變動,從而提高了開發效率并降低了維護成本。

3.5 開啟事務

JFinal提供了兩種開啟事務的方式:聲明式事務和攔截器型事務。聲明式事務只需要在相關的Action方法前添加注解@Before(Tx.class)即可。攔截器型事務共有三種,由ActiveRecord提供。其中TxByRegex攔截器可通過傳入正則表達式對action進行攔截,當actionKey被正則匹配上將開啟事務;TxByActionKeys可以對指定的actionKey進行攔截并開啟事務;TxByActionMethods可以對指定的method進行攔截并開啟事務。攔截器型事務需要在2.1節描述的configIntercpetor()方法中進行配置。

3.6 創建模型組件

Model類是ActiveRecord中最重要的組件之一,它充當MVC模式中的Model部分。Model類應用了泛型思想,具備DAO模式和POJO的功能,提供了通用的持久化操作、數據分頁獲取、表字段與屬性映射等方法。所以只需根據持久化需要定義實體模型類從Model繼承即可擁有強大的數據庫操作方法。假定有個學生實體,它對應的模型組件部分源碼如下:

其中dao是一個全局常量,這樣做的目的是為了給控制器和其它模型組件提供訪問Student的接口。例如查詢某個專業的學生信息,可以執行下面的代碼:

3.7 數據校驗

任何一個Web應用都需要對數據的有效性、合法性進行校驗,防止非法數據進入系統。Validator類是JFinal提供的數據校驗的基類,該類封裝了一些應用中所通用的校驗方法,例如:判斷是否為必填數據、判斷字符串的位數、字符串是否與正則表達式匹配、電子郵箱地址、數值范圍等。開發人員可以繼承Validator類來定義具體的校驗邏輯。以下是常用的若干校驗邏輯源碼:

validate方法用來對頁面提交的各項數據進行校驗,當validate方法中有某一項校驗不通過時執行handleError方法,將錯誤提示信息帶回到相關的頁面。getActionKey()方法能夠得到調用當前校驗邏輯所對應的Action,這樣就可以使得不同的Action能共享相同的校驗邏輯,從而避免代碼的重復編寫。由于Validator類本質上是攔截器,需要在對應的Action前添加注解@Before(XXXXInterceptor.class)使得校驗器起作用。

4 JFinal框架與S2SH框架對比分析

將JFinal框架與S2SH框架進行對比分析,比較點如表1所示。基礎配置方面:JFinal是一個一站式的Java EE開發框架,相對于S2SH架構的集成式開發方式而言,具有很小容量的核心Jar包,學習成本較低。編碼量方面:JFinal不需要開發人員定義POJO,無需對屬性編寫set和get方法和配置文件;而S2SH框架需要編寫POJO,并且在控制層、業務層和持久層都要提供對應的配置文件,所以JFinal框架能夠極大地提高Java EE的開發效率。在持久化方面:S2SH框架采用ORM方式完成實體類與數據表的映射,JFinal框架采用原生JDBC訪問數據庫。由于ORM最終會翻譯成JDBC訪問數據庫,所以在一些復雜關聯查詢的場景,JDBC的性能會明顯高于ORM[12]。

表1 JFinal框架與S2SH框架比較

5 結束語

提出一種基于JFinal框架的Java EE應用開發方法,對JFinal框架的體系結構、執行流程進行了詳細分析。從模型、視圖、控制器三個方面對JFinal框架在Java EE應用中的具體實現進行了詳細描述并給出相關核心源碼。與當前流行的、基于S2SH框架的Java EE開發方法進行了全方位對比,結果表明JFinal框架在核心jar包容量、開發效率、持久化性能方面都要優于S2SH框架。JFinal框架的出現無疑為Java EE應用實現提供了一條高效的途徑,相信未來會有更多的Java EE應用構建于JFinal框架之上。

[1]肖輝輝.基于JSP+Servlet+JavaBean的網上拍賣系統設計與實現[J].電腦開發與應用,2013,26(8):16-20.Xiao Huihui.Design and Implementation of Online Auction System Based on JSP+Servlet+JavaBean[J].Computer Development and Application,2013,26(8):16-20.

[2]劉紅霞,陸文迪.改進的MVC設計模式的研究與應用[J].計算機工程與科學,2015,37(9):1688-1691.Liu Hongxia,Lu Wendi.Research and Implementation and Improved MVC Design Pattern[J].Computer Engineering&Science,2015,37(9):1688-1691.

[3]姜林美,李國剛,杜勇前.結合AOP思想和依賴注入技術的輕量級MVC框架 [J].華僑大學學報 (自然科學版),2016,37(1):92-97.Jiang Linmei,Li Guogang,Du Yongqian.A Light-weight MVC Framework Combining AOP and Dependency Injection[J].Journal of Huaqiao University(Natural Science),2016,37(1):92-97.

[4]王海濤,賈宗璞.基于Struts和Hibernate的Web應用開發[J].計算機工程,2011,37(9):112-114.Wang Haitao,Jia Zongpu.Web Application Development Based on Struts and Hibernate[J].Computer Engineering,2011,37(9):112-114.

[5]龔尚福,龔琴,馮健.基于SSH框架的EPON性能管理系統的設計與實現[J].計算機應用,2013,33(2):571-574.Gong Shangfu,Gong Qin,Feng Jian.Design and Implementation of EPON Performance Management System Based on SSH Framework [J].Journal of Computer Applications,2013,33(2):571-574.

[6]高秀慧,高建華.基于J2EE框架的Web應用可靠性研究[J].計算機工程與設計,2013,34(4):1270-1275.Gao Xiuhui,Gao Jianhua.Research on Web Application Reliability Based on J2EE Framework[J].Computer Engineering and Design,2013,34(4):1270-1275.

[7]葛萌,歐陽宏基.Struts2框架在信息發布系統中的應用研究[J].微處理機,2014,35(2):40-43.Ge Meng,Ouyang Hongji.Application Research of Information Release System Based on Struts2 Framework[J].Microprocessors,2014,35(2):40-43.

[8]龔貞,李斌.Ruby on Rails構建Web敏捷開發[J].科技信息,2010,(13):479-481.Gong Zhen,Li Bin.Agile Web Development with Ruby on Rails[J].Science&Technology Information,2010,(13):479-481

[9]宮薇薇,祝繼常,韓煦.基于Python的網頁版物理實驗快速建設技術[J].大學物理實驗,2016,29(5):114-117.GongWeiwei,Zhu Jichang,Han Xu.Rapid Construction Technology of Web Page Physical Experiment Based on Python [J].Physical Experiment of College,2016,29(5):114-117.

[10]楊寧,劉丹軍.基于JFinal框架的Java Web應用開發研究[J].電腦知識與技術,2014,10(7):1440-1443.Yang Ning,Liu Danjun.Java Web Application Development Research Based on JFinal[J].Computer Knowledge and Technology,2014,10(7):1440-1443.

[11]夏艷秋,袁汝華.基于JFinal框架和HTML5技術的手機應用開發平臺設計 [J].計算機與現代化,2014(1):201-205.Xia Yanqiu,Yuan Ruhua.Mobile Application Development Platform Based on JFinal and HTML5[J].Computer and Modernization,2014(1):201-205.

[12]歐陽宏基,葛萌,陳偉.基于JDBC的數據持久層性能優化研究[J].網絡新媒體技術,2016,5(5):9-15.Ouyang Hongji,Ge Meng,Chen Wei.Research on Performance Optimization of Data Persistence Layer Based on JDBC[J].Journal of Network New Media,2016,5(5):9-15.

Research on Java EE Application Based on JFinal Framework

Ouyang Hongji1,Yu Bo2,Ge Meng1
(1.Computer College,Xianyang Normal University,Xianyang 712000,China;2.Information Engineering Department,Henan Technical College of Construction,Zhengzhou 450064,China)

The Java EE application based on S2SH framework has many problems,such as complicated configuration,large coding workload,large volume,and more dependence on third party jar.For these problems,a method of developing Java EE based on JFinal framework is presented.Firstly,the architecture and execution process of JFinal framework are described in detail.Then,combined with some examples of code from three aspects of the model,view and controller,the specific realization process of JFinal framework is given.Finally,Final framework and S2SH framework are fully compared and analyzed.The results show that Java EE development method based on JFinal framework can greatly improve the development efficiency and have good stability and scalability.

JFinal framework;S2SH framework;Java EE application;High speed development;MVC pattern

10.3969/j.issn.1002-2279.2017.04.012

TP311

A

1002-2279-(2017)04-0045-06

陜西省教育廳科研計劃項目(14JK1796)咸陽師范學院“青年骨干教師”培養項目(XSYGG201615)

歐陽宏基(1982—),男,陜西寶雞人,講師,碩士,主研方向:軟件工程,Java EE應用。

葛萌(1980—),女,陜西咸陽人,講師,碩士,主研方向:軟件工程,圖像處理。

于博(1981—),男,陜西咸陽人,講師,碩士,主研方向:軟件工程,嵌入式系統。

2017-03-08

猜你喜歡
定義數據庫方法
數據庫
財經(2017年2期)2017-03-10 14:35:35
數據庫
財經(2016年15期)2016-06-03 07:38:02
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
數據庫
財經(2016年3期)2016-03-07 07:44:46
成功的定義
山東青年(2016年1期)2016-02-28 14:25:25
數據庫
財經(2016年6期)2016-02-24 07:41:51
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
捕魚
修辭學的重大定義
當代修辭學(2014年3期)2014-01-21 02:30:44
山的定義
公務員文萃(2013年5期)2013-03-11 16:08:37
主站蜘蛛池模板: 国产亚洲欧美日韩在线一区| 国产欧美视频在线| 欧美日韩激情在线| 久久天天躁狠狠躁夜夜2020一| 亚洲人成成无码网WWW| 国产网站免费| 色婷婷综合在线| 日本人妻丰满熟妇区| 毛片视频网址| 国产屁屁影院| 国产欧美精品一区aⅴ影院| 亚洲精品国产综合99久久夜夜嗨| a国产精品| 一级毛片免费高清视频| 国产欧美在线观看精品一区污| 国产精品三级av及在线观看| 免费国产一级 片内射老| 欧美成人综合视频| 日本高清免费一本在线观看 | 区国产精品搜索视频| 国产人成午夜免费看| 毛片基地美国正在播放亚洲 | 免费在线观看av| 国产精品亚洲综合久久小说| 欧美精品aⅴ在线视频| 91青青草视频| 亚洲熟女中文字幕男人总站| 在线看片中文字幕| 日韩第八页| 日本欧美成人免费| 亚洲午夜天堂| 国产精品女熟高潮视频| 久久久久无码精品| 亚洲无码视频一区二区三区| 99精品免费欧美成人小视频| 国产精品对白刺激| 欧美成人综合在线| 男人的天堂久久精品激情| 亚洲 欧美 偷自乱 图片| 国产在线视频自拍| 国产精品亚洲一区二区三区z| 美女一级毛片无遮挡内谢| 国产国模一区二区三区四区| 亚洲国产理论片在线播放| 色135综合网| 久久这里只精品国产99热8| 国产肉感大码AV无码| 国产三级视频网站| 玖玖精品在线| 久夜色精品国产噜噜| 综合色88| 香蕉综合在线视频91| 国产91小视频在线观看| 亚洲精品无码高潮喷水A| 亚洲精品桃花岛av在线| 黄色网站不卡无码| 欧美一区二区三区国产精品| 亚洲天堂2014| 九九热在线视频| 欧美一区二区啪啪| 国产精品自在拍首页视频8| 亚洲女同欧美在线| 三级国产在线观看| 日韩国产精品无码一区二区三区| 亚洲综合天堂网| 54pao国产成人免费视频| 四虎国产精品永久一区| 沈阳少妇高潮在线| 国产区成人精品视频| 91麻豆国产视频| 亚洲精品无码AV电影在线播放| 黄色在线网| 日本一本正道综合久久dvd| 婷婷在线网站| 亚洲资源在线视频| 久久国产乱子| 香蕉网久久| 色网站在线视频| 久久无码av三级| 91丝袜在线观看| 日韩一区精品视频一区二区| 亚洲欧美在线看片AI|