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

一種基于Struts2 框架的Web 分頁模型的設計與實現

2013-08-29 09:38:58崔行臣張明光
山東科學 2013年4期
關鍵詞:頁面數據庫模型

崔行臣,張明光

(山東廣播電視大學現代教育技術中心,山東 濟南 250014)

在Web 應用軟件開發中,通常要對數據進行多種條件的查詢。在傳統設計中,通常是客戶一次從服務器中查詢所要的數據并顯示到客戶端,但當符合條件的數據量較大時,就會增加服務器的通信負載,減慢Web 服務器的響應速度,用戶瀏覽數據的體驗效果較差。因此,適當的分頁技術是十分必要的。如果直接利用數據庫管理系統提供的分頁功能來對數據分頁,性能比較高,但是不同的數據庫實現的方法各不相同,缺乏通用性。在基于JavaEE 平臺上,分頁方法傳統上使用在JSP 中編碼的方式來實現,將頁面的業務操作、控制邏輯和顯示都放在JSP 中,直接在其頁面上對數據進行操作,最后將所取得的數據在頁面進行分頁顯示。這種方法的缺點是應用系統框架之間高度耦合,分頁程序的重用性和移植性差[1-2]。

針對以上問題,本文利用基于MVC 模式的Struts2 架構來實現一種高效的可移植的Web 數據分頁方法,依托良好的層次機構設計達到顯示邏輯和業務邏輯分離、代碼重用性高的目的。

圖1 Struts2 的數據流向圖Fig.1 Data flow diagram of Struts2

1 MVC 模式和Struts 框架

MVC 把一個Web 應用分成3 個基本部分:Model (模型)、View (視圖)和Controler(控制器),這3 個部分以最小的耦合協同工作,從而提高系統的可擴展性和可維護性。模型部件是軟件所處理問題邏輯在獨立于外在顯示內容和形式情況下的內在抽象,它封裝了問題的業務數據和邏輯。視圖部件把表示模型數據和邏輯關系的信息以特定形式展示出來。控制器是使模型和視圖協同工作的部件,把不同的模型和不同的視圖結合在一起,完成不同的請求。模型、視圖與控制器的分離,使得多個視圖共享一個模型,如果用戶通過視圖的控制器改變了模型數據,所有其他依賴于這些數據的視圖都應反映這些變化,也減少了代碼維護量。采用MVC 模式開發有利于軟件工程化管理,每一層各司其職,提供良好的工程結構并降低各個組件之間的耦合性。

Struts2 是實現MVC 的一個優秀框架,提供了較好的層次分隔能力。Struts2 框架中使用Servlet 過濾器來作為控制器FilterDispatcher,它過濾請求并決定由哪個Action 來處理當前請求。Action 在Struts2 中作為模型而存在,主要有兩個功能:一是進行數據的傳遞,Action 中的成員屬性不一定封裝用戶的請求參數,也可以封裝了Action 需要傳入下一個頁面顯示的值;二是可以用來調用業務邏輯處理請求,當Action 把處理請求處理完畢后,會返回一個邏輯視圖。視圖表現形式很多,既支持JSP,也支持FreeMaker 等模版技術[3]。Struts2 的數據流向圖如圖1 所示。

2 Java EE 平臺中幾種典型的分頁技術

2.1 基于SQL 分頁算法

Mysql、Oracle,DB2 等數據庫管理系統(DBMS)都提供了自身的數據庫分頁方法,而且SQL 都對其進行了優化處理:Oracle 使用偽數列rownum 來限制結果集的大小和起始位置;Mysql 使用limit 子句來限制返回結果集的條數;Sqlserver 使用top 關鍵字可以實現分頁。這類方法屬于數據層分頁技術,即從數據庫查詢時就進行過濾截取。雖然各種數據庫都提供了相應的方法,但是在實際程序開發中,如果數據來源由一種數據庫遷移到另外一種數據庫時,由于SQL 分頁代碼不兼容,需要修改大量的程序來適應這種變換,維護起來很困難,也不符合軟件工程開發的思想。

2.2 JSP 分頁方法

將頁面的顯示、控制邏輯及業務操作都放在JSP 中,直接在其頁面進行數據操作。這種方法雖然簡潔直觀,但缺點是過多的業務邏輯和業務操作都混雜在顯示層頁面,不僅程序員難以維護,而且應用系統框架模糊、相應組件之間緊密耦合,嚴重違背了面向對象程序設計原理和軟件設計模式中提倡的單一職責原則和迪米特法則。

2.3 用ResultSet 移動游標實現分頁

在分頁的地方直接使用jdbc 提供的ResultSet 對象來處理數據,ResultSet 可以看作是一張表,包含了符合SQL 查詢語句條件的所有行以及查詢的列標題和值。ResultSet 直接在數據庫上建立游標,并維護指向其當前數據行的光標,使游標定位結果集。但由于游標是放在內存中,在整個會話期間將一直占用內存,并不釋放數據庫連接和ResultSet 對象。這種方式在操作大型數據和訪問用戶很多的時候,有可能導致DBMS 因為資源耗盡而崩潰。

2.4 將查詢結果緩存在HttpSession 或變量中實現分頁

這種方式一般不使用,其缺陷是用戶看到的可能是過期數據并且會占用大量Web 容器內存[4]。

2.5 使用標簽庫

將分頁查詢和顯示做成JSP taglib,簡化JSP 代碼,使用簡單靈活[5]。目前比較流行的分頁標簽庫有displaytag、Pager-taglib 等。

3 基于Struts2 框架的分頁技術方案

針對以上幾種分頁方法存在的問題,在實踐中總結出針對中小型Web 應用系統比較好的分頁方法:檢索指定頁面的顯示數據,用JavaBean 來封裝分頁操作和數據。每次翻頁的時候只從數據庫里檢索頁面大小的塊區的數據。這樣查詢出的記錄數很少,網絡傳輸數據量不大,使用連接池技術能縮短建立數據庫連接過程時間。在架構設計上采用Struts2 框架進行模型層、表示層和控制層的分離。各層完成獨立的功能,相互之間耦合度較小,具有易擴展和易移植的優點[6]。

圖2 分頁查詢流程框架Fig.2 Framework of paging query process

(1) 模 型 層:采 用JavaBean 來封裝頁面請求參數屬性,如顯示第幾頁,查詢結果等。

(2)表示層:表示層的主要任務,一是向業務邏輯層發出需要顯示某頁數據集的HTTP 請求,在該數據集請求中包括需要顯示的總共記錄數、共要顯示多少頁、每頁的最大數以及當前位于第幾頁等;二是接受業務邏輯層返回的記錄結果集,并且顯示為記錄列表[4]。在本文設計的分頁模型中采用JSP 來顯示分頁數據,為了增強顯示層的通用性和可移植性,在JSP 中使用Struts 框架的標簽庫,可以把表現和邏輯分離并且也使得頁面顯示功能不具體綁定在某個顯示框架下面,側重于提供HTML 表示層數據。查詢分頁數據和分頁導航代碼在表示層都利用Struts 標簽顯示。

(3)控制層(Controller):采用Struts2 提供的FilterDispatcher 類作為核心控制器,該控制器作為一個Filter運行在Web 應用中,負責攔截用戶請求后根據映射配置文件struts.xml 再把控制轉交到業務邏輯層(Business Logic)相應的處理器。引入業務邏輯層的意義在于實現顯示、控制和模型的完全分離,提高擴展性和重用性,并減輕了FilterDispatcher 的負擔。

(4)業務邏輯層:采用Struts2 中的Action 類進行業務組件的處理。在Action 中,分頁相關屬性被映射成普通的POJO。主要作用是處理來自表示層的請求,并依據該請求向數據層獲得當前頁的數據記錄,并將結果集返回給表示層[7]。

(5)Dao 層:負責與數據庫的交互操作。傳遞相應的參數,根據Java 多態機制,調用相應的數據庫管理系統,查詢所需數據。為了充分利用已經建立的連接,采用數據源連接池技術來提高查詢速度。

基于Struts2 框架的分頁查詢流程框架和主要類設計如圖2 所示。

4 設計實現

4.1 主要類設計

PageBean 類:作為業務模型封裝了數據庫查詢條件以及提取和保存數據的操作,記錄了記錄總數、當前頁及每頁顯示的記錄數。

Page 類:用于產生分頁信息的對象,實現了用于顯示分頁信息的基本方法。

PagedStatement 抽象類:為了使分頁對所有數據庫具有更好的擴展性,使用模板設計模式來抽象數據庫操作,這些操作包括執行查詢取得一頁數據和數據庫管理類進行交互等。抽象類PagedStatement 根據查詢語句和頁碼查詢出當前頁數據,返回的數據類型沒有具體指定,可根據需要實現以特定方式組織數據的子類,如RowSetDataPage 類以RowSet 類型封裝數據,ListDataPage 類以List 集合封裝數據等等。方法定義為:public ListPage execute Query Of List Page()throws SQLException。查詢當前頁數據時,根據具體的數據庫類型,利用Java 的多態機制來調用相應的實現類獲取數據。針對Sqlserver 數據庫的分頁查詢,實現類定義為PagedStatementSQLServerImpl extends PagedStatement,如果要擴展到 Oracle 分頁數據,只需添加PagedStatement 的Oracle 實現類即可。

4.2 業務邏輯層調用及表示層高效移植實現

在業務邏輯層action 中,以sqlserver 數據庫為例,調用分頁組件的分頁處理方法為:

PagedStatement pst=new PagedStatementSQLServerImpl(sql,pageno,pageNum);

ListDataPage listpage=pst.executeQueryOfListPage();

this.userlist=listpage.getList();∥當前頁記錄數據

this.pageBar=listpage.getHTML("doQuery","pageno");∥頁面分頁代碼

返回的結果集封裝在List 集合中,封裝數據結果的類,如ListDataPage 類有getHTML()方法,用于生成分頁代碼,系統提供默認的分頁代碼,如上下型和隨意型的分頁模型[8],如果用戶不滿意,可以編寫自己所需的分頁代碼。生成的前臺頁面分頁導航條代碼封裝在pageBar 變量中,根據Struts2 機制,注入到頁面中,在表示層利用Struts2 強大的標簽功能可以很方便地顯示分頁數據和分頁鏈接代碼。如果改用其它數據庫,調用相應的實現類即可。

對于分頁代碼,可以放在一個單獨的文件中(page.jsp),假設原來的顯示頁面沒有分頁,只要在頁面的分頁導航位置以 <jsp:include >方式將page.jsp 包含進去,表示層就完成了,完全不用修改原有的代碼。因為在表示層生成的分頁鏈接代碼中,提交表單的動作已經指向當前業務邏輯Action。每次請求提交表單時,頁碼變量pageno 被注入到相應業務邏輯Action,根據pageno 來獲取新的一頁數據。示例代碼如下:

<form name="pageForm" method="post" action="" > <div class="pagestyle" >

<s:property escape="false" value="pageBar"/>∥生成分頁鏈接代碼

</div > </form >

以上分頁代碼經服務器解析后,生成分頁導航條的HTML 代碼,包括“第幾頁”、“共幾頁”,“上一頁”、“下一頁”、“首頁”和“末頁”連接和“轉到第幾頁”的導航選擇列表。

4.3 應用及性能分析

以上討論的分頁模型已在某高校各部門網站系統中得到實際應用,在構造各級網站時只要涉及到數據分頁的頁面,都可以使用該方案來實現。操作步驟為:(1)在業務邏輯層調用接口;(2)在表示層分頁位置導入分頁代碼文件。測試性能比較如表1 所示。

從表1 可以看出,本文提出的解決方案主要從軟件工程的角度來改進傳統的分頁查詢方式,在架構設計、維護及用戶體驗方面具有明顯的優勢。在時間上,在開發環境JDK1.6、Tomcat6.0 下,對于10 萬條數據查詢請求,平均響應時間為0.5 s,而本文提到的其它技術對10 萬條數據記錄查詢時,基于SQL 分頁方法平均響應時間為0.6 s,JSP 分頁方法最好時間也在1 s 以上。

表1 本文模型與傳統方式的性能比較Table 1 Performance comparison of the presented model and the traditional model

5 結語

經測試證明,本文提出的基于MVC 思想和Struts2 架構設計的數據分頁模型具有良好的可擴展性、可維護性及優秀的解耦性,獲得了較高的用戶滿意度。該方案存在的問題在于框架模型管理不方便,下一步將研究采用Spring 框架來集成管理該模型。此外,對于頻繁讀取的數據(如:相鄰上下頁),為節省時間,可以只訪問一次底層數據庫而把符合條件的數據全部讀取至Web 服務器,并在其上生成一個XML 文件,以后客戶端直接和XML 文件交互[9],這也是今后研究的方向。

[1]曹晉,胡谷雨.基于jsp 技術的數據庫查詢分頁顯示[J].計算機技術與發展,2007,17(5):225 -227.

[2]黃櫟橋,陸鑫.基于Struts 框架的Web 數據庫分頁技術[J].計算機工程,2008,28(6):298 -301.

[2]李剛.Struts2.1 權威指南——基于webwork 核心的MVC 開發[M].北京:電子工業出版社,2009.

[3]劉啟文,周大海,夏秀峰.Web 應用中可擴展分頁技術的研究與實現[J].計算機應用,2006,26(12):179 -181.

[4]何玲娟,蟻 龍,劉連臣.一種松耦合高復用MVC 模式的Web 分頁實現[J].計算機工程與應用,2007,43(15):95 -97.

[5]吳東慶,張新猛,王前,等.基于SSH 架構的分頁查詢標簽的研究與實現[J].仲愷農業工程學院學報,2010,23(1):45 -48.

[6]王瑞波.一種分頁查詢優化方法的研究與實現[D].北京:北京化工大學,2009.

[7]張俐.基于MVC 模式的分頁組件應用[J].計算機工程,2011,37(21):255 -257.

[8]顧志峰,李涓子.Web 應用程序分頁策略的研究[J].計算機工程,2005,31(21):60 -62.

[9]勾成圖,張璟,李軍懷.海量數據分頁機制在Web 信息系統中的應用研究[J].2005,25(8):1926 -1929.

猜你喜歡
頁面數據庫模型
大狗熊在睡覺
一半模型
刷新生活的頁面
保健醫苑(2022年1期)2022-08-30 08:39:14
重要模型『一線三等角』
重尾非線性自回歸模型自加權M-估計的漸近分布
數據庫
財經(2017年2期)2017-03-10 14:35:35
3D打印中的模型分割與打包
數據庫
財經(2016年15期)2016-06-03 07:38:02
數據庫
財經(2016年3期)2016-03-07 07:44:46
數據庫
財經(2016年6期)2016-02-24 07:41:51
主站蜘蛛池模板: 熟妇丰满人妻| 全部毛片免费看| 99精品视频在线观看免费播放| 婷婷伊人久久| 亚洲国产成人精品无码区性色| 久久综合九九亚洲一区| 精品三级网站| 欧美日韩亚洲国产| 操美女免费网站| 在线观看免费国产| 久久这里只精品国产99热8| 亚洲第一综合天堂另类专| 亚洲精品高清视频| 中文字幕亚洲专区第19页| 日韩高清成人| 亚洲自偷自拍另类小说| 免费在线国产一区二区三区精品| 亚洲开心婷婷中文字幕| 国产情侣一区二区三区| 91精品国产自产在线观看| 日韩av无码精品专区| 国产幂在线无码精品| 国产亚洲精品无码专| 亚洲熟女中文字幕男人总站| 亚洲日韩每日更新| 久久91精品牛牛| 国产成人做受免费视频| 精品夜恋影院亚洲欧洲| 国产乱论视频| 99中文字幕亚洲一区二区| 在线观看国产精品日本不卡网| 在线观看国产黄色| 国产自产视频一区二区三区| 综合人妻久久一区二区精品 | 色综合a怡红院怡红院首页| 在线观看亚洲成人| 欧美性色综合网| 国产欧美精品午夜在线播放| 萌白酱国产一区二区| 亚洲第一成年人网站| av午夜福利一片免费看| 色哟哟国产精品| 99re精彩视频| 热久久这里是精品6免费观看| 国产精品视频公开费视频| 亚洲第一页在线观看| 18禁黄无遮挡免费动漫网站| 特级精品毛片免费观看| 午夜日b视频| 黄色一及毛片| 美女内射视频WWW网站午夜| 免费视频在线2021入口| 色婷婷狠狠干| 国产精品va| 日日碰狠狠添天天爽| 午夜福利在线观看入口| 国产欧美中文字幕| 亚国产欧美在线人成| 色综合五月| 免费日韩在线视频| 香蕉国产精品视频| 国产欧美精品专区一区二区| 97视频免费看| 欧美午夜在线播放| 中日韩一区二区三区中文免费视频| 欧美一级高清片欧美国产欧美| 国产99精品久久| 色综合久久88| 日韩第九页| 国产丝袜丝视频在线观看| 亚洲区第一页| 九色国产在线| 亚洲欧美成人在线视频| 国产精品无码作爱| 视频一区视频二区中文精品| 亚洲男人的天堂在线| 精品三级网站| 欧美激情视频在线观看一区| 日韩在线成年视频人网站观看| 亚洲天堂网视频| www.亚洲一区二区三区| 日韩高清中文字幕|