[摘要]介紹了MVC多層開發模式和兩種J2EE平臺下的開發框架Struts和Hibernate。研究了兩種框架的整合方法,并在信息發布系統中進行了實現。
[關鍵詞]J2EE平臺 MVC開發模式Struts框架Hibernate框架信息發布系統
近年來,在網絡技術的迅速發展和J2EE平臺被廣泛采用的背景下,基于多層B/S結構的Web體系結構逐漸發展并成為主流[1]。但是,在多層Web體系結構的設計中,普遍存在著程序可重用度低、功能模塊可擴展性差、維護工作繁瑣及開發中分工協作困難等問題。設計一個松耦合和緊內聚的系統一直是軟件工程領域重點研究的問題[2]。開源的基于MVC模式的Struts框架很好的解決了上述問題,但Struts框架只解決了視圖層、業務層和控制層的分離,沒有對復雜的持久層提供架構支持。而Hibernate作為另一種開源的對象/關系映射框架,提供了對象到關系數據庫的持久化支持。本文將研究整合Struts與Hibernate輕量級框架,并在信息發布系統中進行應用。
一、主流開發框架與多層開發模式
1.Struts框架
Struts 是一個表示層的框架,它對經典的MVC設計模式有著良好的實現。Struts由一組相互協作的類(組件)、Serlvet以及JSP標簽庫組成,有它自己的控制器(Controller ),同時整合了其他的一些技術去實現模型層(Model)和視圖層(View)。在模型層,Struts可以很容易的與數據訪問技術相結合。在視圖層,Struts能夠與JSP、XSL等表示層組件結合。控制器(Controller)的實現是由ActionServlet, Action Mapping和一系列另外的Action類分工協作;模型(Model)由EJB,JDO(Java Data Object)和JavaBean業務對象(Business Object)構成;視圖不僅由JSP, HTML, XML文件和定制標記(Custom Tags)表示,還包括由ActionForms和JavaBeans展現模型(View Model),以及由XML文件和屬性文件(Property Files)構成的資源。
2. Hibernate框架
Hibernate 是一個持久層框架,是一個基于Java的對象/關系數據庫映射工具,它將對象模型表示的數據映射到用SQL表示的關系模型上去。作為一個開放源代碼的對象關系映射框架(ORM),它對JDBC進行了非常輕量級的對象封裝[3],使得Java程序員可以隨心所欲的使用對象編程思維來操縱數據庫。它實現了實體類和數據庫之間的對應和溝通。程序員不必頻繁操作JDBC變成過程中的Connection、Statement、Result等這些對象,Hibernate將其中80%的工作量都自動完成,程序員只完成剩下20%具體實現業務功能的過程。
3.MVC開發模式
MVC模式為多層的Web應用開發模式,模式中M代表模型,V代表視圖,C代表控制器。ActionServlet作為Struts的核心,扮演著中央控制器的角色,它負責接收Http請求,并且將產生的相應的響應傳遞到請求的頁面,這個過程中,ActionServlet最初處于待命狀態,當容器(如tomcat)接受到請求,它對應的doget和dopost將處理get和post請求,ActionServlet接收到請求后,將調用RequestProcess對象對消息進行處理,然后,它將根據瀏覽器的請求路徑、struts-config.xml文件中對應的請求路徑和Action Bean的對應關系來調用對應的Action Bean中的execute方法,之后調用業務模型,然后將含有下一個頁面返回信息的ActionForward對象傳給ActionServlet,再由ActionServlet轉到下一個頁面返回給瀏覽器,JSP、Javasc等則扮演著視圖的角色。下圖是MVC模式的邏輯實現圖。
當Struts中的ActionServlet最終調用業務模型時,涉及到的有關關系數據庫的存取問題,則交由Hibernate架構完成,圖表2更直觀的反映了Struts與Hibernate兩種框架的結合。
二、系統方案
1.開發目的:
該信息發布系統是針對搭建綜合型平臺網站而開發,系統應能夠接受用戶的注冊,在用戶登錄時還要識別用戶的級別從而進入不同的權限頁面以便發布信息或進行不同級別的管理。普通用戶只能向所申請的欄目內發布信息;高級用戶能對頻道和欄目進行管理并具有普通用戶的操作權限;超級管理員應能夠通過用戶管理模塊對所有用戶進行管理,此外還具有普通用戶和高級用戶的所有操作權限。系統同時要支持文章標題和內容兩個層次的搜索,還要具有前臺頁面的分頁顯示功能。
2.功能模塊劃分
以下是根據業務需求進行的系統的功能模塊劃分:
(1)用戶注冊與登錄模塊;
(2)用戶管理模塊;
(3)頻道與欄目管理模塊;
(4)文章審核模塊;
(5)文章發布及管理模塊;
(6)站內搜索模塊;
(7)分頁顯示模塊。
3.系統的層次架構
為了使該系統具有更好的功能擴展性和可維護性,系統采用Struts 與Hibernate 框架進行整合開發,能縮短開發時間,降低開發成本。系統總體上可分為以下幾個層次:
(1)表示層:運行在客戶端瀏覽器中,用JSP頁面完成與用戶的交互。
(2)控制層:由Struts框架實現,該層中通過ActionServlet接收來自用戶的Http請求,調用RequestProcess對象對消息進行處理,然后根據 struts-config.xml調用對應的ActionBean中的execute方法,之后調用業務模型,然后將含有下一個頁面返回信息的ActionForward對象傳給ActionServlet,再由ActionServlet轉到下一個頁面返回給瀏覽器。
(3)業務邏輯層:該層負責實現系統的業務需求,由創建的JavaBean來實現。
(4)數據持久層:由Hibernate框架實現,用Hibernate的對象從數據源中進行數據操縱。
(5)數據源層:存放系統的應用數據,該系統選用的是Oracle9.2。
三、平臺實現
系統采用基于MVC模式的Struts+Hibernate結合的輕量級web架構開發,開發環境為Myeclipse8.5,JSP引擎為Tomcat6.0。視圖層由JSP和HTML實現;Struts框架則為系統視圖層與控制層提供解決方案;Hibernate框架負責完成與數據的獲取與處理。下面以用戶登錄模塊為例,研究Struts與Hibernate框架在信息發布系統中的應用。
1.表現層與控制層
這兩層主要是基于Struts 框架,包含login.jsp等頁面文件及LoginAction。
Struts-config.xml 配置文件部分代碼如下:
……
name=\"loginForm\"scope=\"request\"validate=\"1\">
……
2.業務層
下面代碼用來驗證用戶身份的合法性,主題部分代碼如下:
public class LoginAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
LoginActionForm laf = (LoginActionForm)form;
String username = laf.getUsername();
String password = laf.getPassword();
String errorInfo = \"\";
try {
UserManager myUserManager=new UserManager();
myUserManager.login(username, password);
request.setAttribute(\"username\", username);
return mapping.findForward(\"success\");
}catch(UserNotFoundException unfe) {
unfe.printStackTrace();
errorInfo = \"=[\" + username + \"]\";
}catch(PasswordErrorException pee) {
pee.printStackTrace();
errorInfo = \"\";
}
request.setAttribute(\"errorinfo\", errorInfo);
return mapping.findForward(\"error\");
}
}
3.數據持久層
在生成數據模型時,需要對數據表進行Hibernate逆向工程,此時,每個數據表都會對應于生成一個Hibernate映射文件。以用戶信息表User表為例,該過程會創建User.hbm.xml,同時生成User.java 類,并將注冊信息加入到hibernate.cfg.xml 文件中。
下面是User.hbm.xml 配置文件中的部分代碼:
……
下面是hibernate.cfg.xml 配置文件中的部分代碼:
……
……
四、總結:
基于J2EE的Web應用以其層次性、平臺無關性、安全性和可擴展性成為目前企業Web 應用系統的主要解決方案。由于Web 應用系統開發的復雜性,可以采用分層開發的策略,將其分為表示層、業務層、持久層等。每層在應用程序都有明確的責任。Struts作為成熟的應用框架,在J2EE開發平臺下有廣泛的應用,對于MVC開發模式有著良好的實現;Hibernate框架實現了實體類和數據庫中對應數據庫之間的對應和溝通,使得Java程序員從復雜的Jdbc來操作中解脫出來,將更多的精力投入到業務邏輯中來。兩種框架的整合使用,可以縮短開發時間,開發出低耦合、高內聚、易擴展、易維護的Web應用程序。
參考文獻:
[1]段朋鵬:基于Struts和Hibernate的智能考試系統的研究與實現.[D].武漢:武漢理工大學,2008.4: 1-2
[2]高擴 魏振鋼:整合Struts+Spring+Hibernate 框架的信息系統設計與研究.[J]現代計算機.2009.5:147
[3] 楊波劉淵冷文浩:基于Struts+Hibernate+Spring架構的船舶數字化平臺的設計與實現[J]. 計算機應用與軟件.2008.2(25):178