RFID世界網(wǎng) >
技術(shù)文章 >
其他 >
正文
基于 struts 和 Hibernate 的學(xué)生考勤系統(tǒng)的設(shè)計
作者:周程 張藝超 馬汝貞
來源:RFID世界網(wǎng)
日期:2009-04-27 10:09:31
摘要:為克服手工處理學(xué)生考勤信息的缺點,采用 JAVA 環(huán)境下實現(xiàn)MVC設(shè)計模式的 struts 框架和實現(xiàn)數(shù)據(jù)持久化的 Hibernate 框架開發(fā)基于 Web 的學(xué)生考勤管理系統(tǒng)。在 struts 和 Hibernate 中添加DAO設(shè)計模式和業(yè)務(wù)代理模式來進一步提高系統(tǒng)的維護性和可擴展性。探討了如何結(jié)合 PowerDesigner 和 Myeclipse 等工具快速開發(fā)應(yīng)用系統(tǒng)
1. MVC 設(shè)計模式設(shè)計模式概述
1.1 MVC 設(shè)計模式
MVC 設(shè)計模式是一種著名的軟件開發(fā)設(shè)計模式,它是模型、視圖、控制器( Mode1.View.Controller )縮寫。模型封裝了用戶數(shù)據(jù)和處理數(shù)據(jù)的業(yè)務(wù)邏輯;視圖提供了用戶界面,將用戶輸入數(shù)據(jù)傳遞給控制器或?qū)⒛P蛿?shù)據(jù)顯示給用戶;控制器連接了模型和視圖,判斷請求交給哪個模型,調(diào)用視圖顯示模型處理用戶請求結(jié)果。
MVC 設(shè)計模式將應(yīng)用程序進行了分層,視圖和模型通過控制器連接,從而減少了用戶界面和業(yè)務(wù)邏輯之間的耦合,使程序設(shè)計更加清晰、靈活,也提高了軟件的可擴展性、可維護性。
1.2 Struts 框架
Struts 是基于的MVC模式應(yīng)用框架,遵守了 J2EE 的 Servlet、JSP 等技術(shù)規(guī)范,并且根據(jù)J2EE的特點做了相應(yīng)的變化和擴展,是J2EE 體系架構(gòu)的一種輕量級實現(xiàn)。
在 Struts 框架中,控制器由 ActionServlet 和 Action 類以及 Struts.config.xml 配置文件實現(xiàn)。ActionServlet 是 Struts 框架的核心控制組件, 所有的用戶請求都被映射到 ActionServlet, 由 ActionServlet 根據(jù)配置文件中的定義將控制轉(zhuǎn)移到指定的 Action 類。Action 類是用戶請求與業(yè)務(wù)邏輯之間的橋梁,它執(zhí)行一個 execute()方法并返回一個ActionForward對象,當 ActionServlet 接收到該對象后,根據(jù) Struts config.xml 中的配置信息將請求轉(zhuǎn)發(fā)。Struts 框架中的視圖主要由 JSP 頁面組成。ActionForm 是 Struts 在視圖層的一個核心組件,它是專門用來在視圖層和控制層之間傳遞表單數(shù)據(jù)的 DTO(Dam Transfer Object,數(shù)據(jù)傳輸對象),它還包括了用于數(shù)據(jù)驗證的 validate()方法和用于數(shù)據(jù)復(fù)位的 reset()方法。在 Struts 應(yīng)用程序中,開發(fā)人員可以選擇 JavaBean、Hibernate、EJB 等組件來實現(xiàn) Struts 框架中的模型。
2.Hibernate 持久化技術(shù)
Hibernate 是一個基于 Java 的開放源代碼的 O/R Mapping (對象關(guān)系映射框架),它通過其強大的 O/R 映射功能 JAVA 對象同存于關(guān)系數(shù)據(jù)庫中的數(shù)據(jù)進行映射,并對 JDBC 進行了輕量級的對象封裝,可以使JAVA程序員方便地使用對象編程思維來操縱數(shù)據(jù)庫,它不僅提供 ORM 映射服務(wù),還提供數(shù)據(jù)查詢和數(shù)據(jù)緩存的方法,可以提高查詢和處理數(shù)據(jù)的效率。它是一種提供面向?qū)ο蟮臄?shù)據(jù)庫服務(wù)中間件。
3.基于 Struts 和 Hibernate 的考勤管理系統(tǒng)的設(shè)計
隨著教育部對在校大學(xué)生出勤的相關(guān)規(guī)定出臺,各大專院校加大了對學(xué)生考勤的管理力度,但大部份都采用手工處理的方法,工作量大且效率低。本系統(tǒng)能夠?qū)崿F(xiàn)網(wǎng)上對學(xué)生考勤信息進行添加、刪除、修改、查詢和統(tǒng)計功能,管理人員能及時了解學(xué)生出勤情況和某課班級某課程的出勤情況。在開發(fā)的過程中,使用 PowerDesigner 作為 CASE 工具,采用對 Hibernate 和 Struts 提供良好支持的 Myeclipse 6.0 作為系統(tǒng)的開發(fā)環(huán)境,數(shù)據(jù)庫采用 MYSQL5.0,WEB 服務(wù)器采用 jakarta Tomcm6.0 并安裝了 JDK6.0。
3.1數(shù)據(jù)庫層的設(shè)計
Power Designer 是 Sybase 公司的 CASE 工具集,使用它可以方便地對管理信息系統(tǒng)進行分析設(shè)計。DataArchitect 模塊是Power designer 的核心工具,它采用二級數(shù)據(jù)建模方式,即概念級和物理級。在概念級,概念數(shù)據(jù)模型 (CDM) 代表業(yè)務(wù)信息需求,不考慮在數(shù)據(jù)庫上的物理實現(xiàn),通過它可以繪制系統(tǒng)的實體聯(lián)系圖(E.R圖),即系統(tǒng)的靜態(tài)特征;在物理級,物理數(shù)據(jù)模型 (PDM) 指定了物理實現(xiàn)的目標RDBMS的特征等細節(jié)。它可以生成數(shù)據(jù)庫腳本,通過選擇 ODBC 方式則可以直接連接到數(shù)據(jù)庫,從而直接產(chǎn)生數(shù)據(jù)庫表以及其他數(shù)據(jù)庫對象。它與其它設(shè)計軟件相配合使用可以縮短開發(fā)時間和使系統(tǒng)設(shè)計更優(yōu)化。
在本系統(tǒng)的設(shè)計過程中,我們利用 Power Designer 來完成系統(tǒng)數(shù)據(jù)庫概念設(shè)計和 MYSQL 數(shù)據(jù)庫表的工作。首先,在PowerDesigner 中設(shè)計系統(tǒng)的概念層次的數(shù)據(jù)模型,通過它的CDM 功能創(chuàng)建實體關(guān)系圖來描述系統(tǒng)的數(shù)據(jù)組織結(jié)構(gòu)。通過它的“檢查模型”功能,校驗概念數(shù)據(jù)模型中實體、實體屬性、實體標識和實體間關(guān)系等是否存在問題。接著,選擇 MYSQL 作為系統(tǒng)的目標數(shù)據(jù)庫,生成在MYSQL 上實現(xiàn)的數(shù)據(jù)庫的物理數(shù)據(jù)模型 (PDM) :最后,通過“產(chǎn)生數(shù)據(jù)庫”功能,并選擇 ODBC 方式連接到指定的數(shù)據(jù)庫,從而直接產(chǎn)生MYSQL 上的數(shù)據(jù)庫表以及其他數(shù)據(jù)庫對象。
3.2 持久化層的設(shè)計
數(shù)據(jù)持久層基于 Hibernate 架構(gòu),采用了 DAO 設(shè)計模式和抽象工廠設(shè)計模式。下面以學(xué)生類 (Student) 為例進行說明。首先,把學(xué)生信息封裝為 VO(Value Object) 。VO 是一組值對象,只包含了一些屬性和 getter/setter 方法的 POJO(Plan Old Java Bean) 。然后,采用 DAO 設(shè)計模式和抽象工廠設(shè)計模式,完成 DAO 工廠和 Hibernate 數(shù)據(jù)庫操作的具體實現(xiàn)。最后,利用 Hibernate 的配置文件完成從應(yīng)用程序到數(shù)據(jù)庫的映射。
在 Myeclipse 開發(fā)環(huán)境中,首先配置數(shù)據(jù)庫服務(wù)器的連接,然后利用 Myeclipse 的 Hibernate 的逆向工程,可以自動完成持久化層的設(shè)計任務(wù)。例如對學(xué)生表 (student) 進行逆向工程, 將會自動生成Student.iava、AbstractStudent.iava、StudentDAO.iava、Student.hbm.xml等文件。其中,Abstract Student.iava 就是一個封裝了 Student 信息的VO。Student DAO.java采用DAO模式封閉了數(shù)據(jù)庫操作。
在 hibemate.cfg.xml 配置文件中,定義了符合 SQLServer 規(guī)范的 dialect 方言,連接池訪問數(shù)據(jù)庫的 URL 資源定位地址以及數(shù)據(jù)庫名稱kq, 數(shù)據(jù)庫連接驅(qū)動程序,Hibernate管理事務(wù)、是否顯示SQL語句。在mapping映射文件配置部分,定義了教師表 (Teacher)、學(xué)生表 (Student1、考勤表(Attendance) 等對應(yīng)的映射文件等。在該層的設(shè)計中,VO 的信息封裝體現(xiàn)了面向?qū)ο笤O(shè)計編程思想; DAO 的設(shè)計模式和抽象工廠模式減弱了上層調(diào)用和具體實現(xiàn)之間的耦合;Hibemate 配置實現(xiàn)了數(shù)據(jù)庫高移植性,只需要改變 Hibemate 配置文件,不用修改程序設(shè)計就可以完成不同數(shù)據(jù)庫之間的更換。
3.3 業(yè)務(wù)邏輯層設(shè)計
業(yè)務(wù)邏輯層包含了供客戶端程序調(diào)用的業(yè)務(wù)邏輯規(guī)則,以幫助客戶端完成業(yè)務(wù)操作。該層采用業(yè)務(wù)代理、DAO和抽象工廠設(shè)計模式使用業(yè)務(wù)代理、DAO 和抽象工廠設(shè)計模式,可以使業(yè)務(wù)邏輯更加靈活,如果具體業(yè)務(wù)發(fā)生變化,在表示層和數(shù)據(jù)持久化層改變很小就可以完成改變,這種設(shè)計能夠增強系統(tǒng)的可維護性和靈活性。
3.4 表示層設(shè)計
首先,建立用于用戶輸入和瀏覽的JSP視圖頁面和封裝用戶表單信息的 ActionForm 。接著,搭建用戶請求和業(yè)務(wù)邏輯之間的橋梁——Action 組件,該組件負責(zé)把用戶信息和具體的業(yè)務(wù)邏輯處理聯(lián)系在一起。
最后,通過 Struts 配置連接 ActionForm 和 Action,完成一個業(yè)務(wù)設(shè)計。該層設(shè)計中,采用頁面設(shè)計和表示層業(yè)務(wù)邏輯分離,提高了應(yīng)用程序的可維護性。
4.總結(jié)
本文介紹了 MVC 設(shè)計模式以及 Struts 和 Hibernate 框架的工作原理,利用了他們的優(yōu)點互補,有機地將 Struts+Hi.bernate 框架結(jié)合起來構(gòu)建了一個學(xué)生考勤管理系統(tǒng),利用 DAO 設(shè)計模式、業(yè)務(wù)代理模式等克服了傳統(tǒng)Web信息系統(tǒng)的缺點,提高了系統(tǒng)的可維護性、可擴展性,降低了系統(tǒng)的耦合性。通過使用 Powerdesigner 和 Myeclipse 等開發(fā)工具能夠有效的加快開發(fā)速度和效率,大大減少開發(fā)人員的手工編寫代碼的工作量。隨著本系統(tǒng)的應(yīng)用,教師可以隨時隨地上報出勤情況,管理人員可以隨時了解每門課程每個班級和每個學(xué)生的出勤情況,本系統(tǒng)通過匯總功能產(chǎn)生因出勤率低而取消考試資格的學(xué)生名單。這對提高教務(wù)管理工作效率意義較大。
1.1 MVC 設(shè)計模式
MVC 設(shè)計模式是一種著名的軟件開發(fā)設(shè)計模式,它是模型、視圖、控制器( Mode1.View.Controller )縮寫。模型封裝了用戶數(shù)據(jù)和處理數(shù)據(jù)的業(yè)務(wù)邏輯;視圖提供了用戶界面,將用戶輸入數(shù)據(jù)傳遞給控制器或?qū)⒛P蛿?shù)據(jù)顯示給用戶;控制器連接了模型和視圖,判斷請求交給哪個模型,調(diào)用視圖顯示模型處理用戶請求結(jié)果。
MVC 設(shè)計模式將應(yīng)用程序進行了分層,視圖和模型通過控制器連接,從而減少了用戶界面和業(yè)務(wù)邏輯之間的耦合,使程序設(shè)計更加清晰、靈活,也提高了軟件的可擴展性、可維護性。
1.2 Struts 框架
Struts 是基于的MVC模式應(yīng)用框架,遵守了 J2EE 的 Servlet、JSP 等技術(shù)規(guī)范,并且根據(jù)J2EE的特點做了相應(yīng)的變化和擴展,是J2EE 體系架構(gòu)的一種輕量級實現(xiàn)。
在 Struts 框架中,控制器由 ActionServlet 和 Action 類以及 Struts.config.xml 配置文件實現(xiàn)。ActionServlet 是 Struts 框架的核心控制組件, 所有的用戶請求都被映射到 ActionServlet, 由 ActionServlet 根據(jù)配置文件中的定義將控制轉(zhuǎn)移到指定的 Action 類。Action 類是用戶請求與業(yè)務(wù)邏輯之間的橋梁,它執(zhí)行一個 execute()方法并返回一個ActionForward對象,當 ActionServlet 接收到該對象后,根據(jù) Struts config.xml 中的配置信息將請求轉(zhuǎn)發(fā)。Struts 框架中的視圖主要由 JSP 頁面組成。ActionForm 是 Struts 在視圖層的一個核心組件,它是專門用來在視圖層和控制層之間傳遞表單數(shù)據(jù)的 DTO(Dam Transfer Object,數(shù)據(jù)傳輸對象),它還包括了用于數(shù)據(jù)驗證的 validate()方法和用于數(shù)據(jù)復(fù)位的 reset()方法。在 Struts 應(yīng)用程序中,開發(fā)人員可以選擇 JavaBean、Hibernate、EJB 等組件來實現(xiàn) Struts 框架中的模型。
2.Hibernate 持久化技術(shù)
Hibernate 是一個基于 Java 的開放源代碼的 O/R Mapping (對象關(guān)系映射框架),它通過其強大的 O/R 映射功能 JAVA 對象同存于關(guān)系數(shù)據(jù)庫中的數(shù)據(jù)進行映射,并對 JDBC 進行了輕量級的對象封裝,可以使JAVA程序員方便地使用對象編程思維來操縱數(shù)據(jù)庫,它不僅提供 ORM 映射服務(wù),還提供數(shù)據(jù)查詢和數(shù)據(jù)緩存的方法,可以提高查詢和處理數(shù)據(jù)的效率。它是一種提供面向?qū)ο蟮臄?shù)據(jù)庫服務(wù)中間件。
3.基于 Struts 和 Hibernate 的考勤管理系統(tǒng)的設(shè)計
隨著教育部對在校大學(xué)生出勤的相關(guān)規(guī)定出臺,各大專院校加大了對學(xué)生考勤的管理力度,但大部份都采用手工處理的方法,工作量大且效率低。本系統(tǒng)能夠?qū)崿F(xiàn)網(wǎng)上對學(xué)生考勤信息進行添加、刪除、修改、查詢和統(tǒng)計功能,管理人員能及時了解學(xué)生出勤情況和某課班級某課程的出勤情況。在開發(fā)的過程中,使用 PowerDesigner 作為 CASE 工具,采用對 Hibernate 和 Struts 提供良好支持的 Myeclipse 6.0 作為系統(tǒng)的開發(fā)環(huán)境,數(shù)據(jù)庫采用 MYSQL5.0,WEB 服務(wù)器采用 jakarta Tomcm6.0 并安裝了 JDK6.0。
3.1數(shù)據(jù)庫層的設(shè)計
Power Designer 是 Sybase 公司的 CASE 工具集,使用它可以方便地對管理信息系統(tǒng)進行分析設(shè)計。DataArchitect 模塊是Power designer 的核心工具,它采用二級數(shù)據(jù)建模方式,即概念級和物理級。在概念級,概念數(shù)據(jù)模型 (CDM) 代表業(yè)務(wù)信息需求,不考慮在數(shù)據(jù)庫上的物理實現(xiàn),通過它可以繪制系統(tǒng)的實體聯(lián)系圖(E.R圖),即系統(tǒng)的靜態(tài)特征;在物理級,物理數(shù)據(jù)模型 (PDM) 指定了物理實現(xiàn)的目標RDBMS的特征等細節(jié)。它可以生成數(shù)據(jù)庫腳本,通過選擇 ODBC 方式則可以直接連接到數(shù)據(jù)庫,從而直接產(chǎn)生數(shù)據(jù)庫表以及其他數(shù)據(jù)庫對象。它與其它設(shè)計軟件相配合使用可以縮短開發(fā)時間和使系統(tǒng)設(shè)計更優(yōu)化。
在本系統(tǒng)的設(shè)計過程中,我們利用 Power Designer 來完成系統(tǒng)數(shù)據(jù)庫概念設(shè)計和 MYSQL 數(shù)據(jù)庫表的工作。首先,在PowerDesigner 中設(shè)計系統(tǒng)的概念層次的數(shù)據(jù)模型,通過它的CDM 功能創(chuàng)建實體關(guān)系圖來描述系統(tǒng)的數(shù)據(jù)組織結(jié)構(gòu)。通過它的“檢查模型”功能,校驗概念數(shù)據(jù)模型中實體、實體屬性、實體標識和實體間關(guān)系等是否存在問題。接著,選擇 MYSQL 作為系統(tǒng)的目標數(shù)據(jù)庫,生成在MYSQL 上實現(xiàn)的數(shù)據(jù)庫的物理數(shù)據(jù)模型 (PDM) :最后,通過“產(chǎn)生數(shù)據(jù)庫”功能,并選擇 ODBC 方式連接到指定的數(shù)據(jù)庫,從而直接產(chǎn)生MYSQL 上的數(shù)據(jù)庫表以及其他數(shù)據(jù)庫對象。
3.2 持久化層的設(shè)計
數(shù)據(jù)持久層基于 Hibernate 架構(gòu),采用了 DAO 設(shè)計模式和抽象工廠設(shè)計模式。下面以學(xué)生類 (Student) 為例進行說明。首先,把學(xué)生信息封裝為 VO(Value Object) 。VO 是一組值對象,只包含了一些屬性和 getter/setter 方法的 POJO(Plan Old Java Bean) 。然后,采用 DAO 設(shè)計模式和抽象工廠設(shè)計模式,完成 DAO 工廠和 Hibernate 數(shù)據(jù)庫操作的具體實現(xiàn)。最后,利用 Hibernate 的配置文件完成從應(yīng)用程序到數(shù)據(jù)庫的映射。
在 Myeclipse 開發(fā)環(huán)境中,首先配置數(shù)據(jù)庫服務(wù)器的連接,然后利用 Myeclipse 的 Hibernate 的逆向工程,可以自動完成持久化層的設(shè)計任務(wù)。例如對學(xué)生表 (student) 進行逆向工程, 將會自動生成Student.iava、AbstractStudent.iava、StudentDAO.iava、Student.hbm.xml等文件。其中,Abstract Student.iava 就是一個封裝了 Student 信息的VO。Student DAO.java采用DAO模式封閉了數(shù)據(jù)庫操作。
在 hibemate.cfg.xml 配置文件中,定義了符合 SQLServer 規(guī)范的 dialect 方言,連接池訪問數(shù)據(jù)庫的 URL 資源定位地址以及數(shù)據(jù)庫名稱kq, 數(shù)據(jù)庫連接驅(qū)動程序,Hibernate管理事務(wù)、是否顯示SQL語句。在mapping映射文件配置部分,定義了教師表 (Teacher)、學(xué)生表 (Student1、考勤表(Attendance) 等對應(yīng)的映射文件等。在該層的設(shè)計中,VO 的信息封裝體現(xiàn)了面向?qū)ο笤O(shè)計編程思想; DAO 的設(shè)計模式和抽象工廠模式減弱了上層調(diào)用和具體實現(xiàn)之間的耦合;Hibemate 配置實現(xiàn)了數(shù)據(jù)庫高移植性,只需要改變 Hibemate 配置文件,不用修改程序設(shè)計就可以完成不同數(shù)據(jù)庫之間的更換。
3.3 業(yè)務(wù)邏輯層設(shè)計
業(yè)務(wù)邏輯層包含了供客戶端程序調(diào)用的業(yè)務(wù)邏輯規(guī)則,以幫助客戶端完成業(yè)務(wù)操作。該層采用業(yè)務(wù)代理、DAO和抽象工廠設(shè)計模式使用業(yè)務(wù)代理、DAO 和抽象工廠設(shè)計模式,可以使業(yè)務(wù)邏輯更加靈活,如果具體業(yè)務(wù)發(fā)生變化,在表示層和數(shù)據(jù)持久化層改變很小就可以完成改變,這種設(shè)計能夠增強系統(tǒng)的可維護性和靈活性。
3.4 表示層設(shè)計
首先,建立用于用戶輸入和瀏覽的JSP視圖頁面和封裝用戶表單信息的 ActionForm 。接著,搭建用戶請求和業(yè)務(wù)邏輯之間的橋梁——Action 組件,該組件負責(zé)把用戶信息和具體的業(yè)務(wù)邏輯處理聯(lián)系在一起。
最后,通過 Struts 配置連接 ActionForm 和 Action,完成一個業(yè)務(wù)設(shè)計。該層設(shè)計中,采用頁面設(shè)計和表示層業(yè)務(wù)邏輯分離,提高了應(yīng)用程序的可維護性。
4.總結(jié)
本文介紹了 MVC 設(shè)計模式以及 Struts 和 Hibernate 框架的工作原理,利用了他們的優(yōu)點互補,有機地將 Struts+Hi.bernate 框架結(jié)合起來構(gòu)建了一個學(xué)生考勤管理系統(tǒng),利用 DAO 設(shè)計模式、業(yè)務(wù)代理模式等克服了傳統(tǒng)Web信息系統(tǒng)的缺點,提高了系統(tǒng)的可維護性、可擴展性,降低了系統(tǒng)的耦合性。通過使用 Powerdesigner 和 Myeclipse 等開發(fā)工具能夠有效的加快開發(fā)速度和效率,大大減少開發(fā)人員的手工編寫代碼的工作量。隨著本系統(tǒng)的應(yīng)用,教師可以隨時隨地上報出勤情況,管理人員可以隨時了解每門課程每個班級和每個學(xué)生的出勤情況,本系統(tǒng)通過匯總功能產(chǎn)生因出勤率低而取消考試資格的學(xué)生名單。這對提高教務(wù)管理工作效率意義較大。