程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 基於Struts和Hibenate的發布系統研究

基於Struts和Hibenate的發布系統研究

編輯:關於JAVA

摘 要 本文分析了傳統Web信息系統的缺點,詳細闡述了MVC設計模式思想,剖析了當前被廣泛應用的開源設計框架:Struts和Hibernate的工作原理,基於以上分析提出將二者結合起來實現優勢互補共同開發遙感信息發布系統的思路,最後結合了DAO和工廠設計模式實現了具有良好可擴展性、實用性和可維護性的遙感信息發布系統。

關鍵詞 遙感數據分發;MVC設計模式;Struts框架;Hibernate映射工具

引言

隨著Internet技術的飛速發展,Web信息系統被廣泛應用。遙感信息發布系統,就是指基於Web的遙感數據信息發布系統。隨著時間的推移,傳統的Web信息系統暴露了很多問題,如頁面邏輯、業務邏輯和數據邏輯雜糅在一起,系統的耦合性高,修改、維護困難,擴展性差。為克服以上問題,新的開發方法也不斷被提出來,如軟件分層思想,MVC設計模式等等。

本文就如何構建弱耦合性,可維護和可擴展的遙感信息發布系統等問題展開探討。根據當前Web技術的發展,提出了采用Java環境下實現MVC設計模式的Struts框架和實現數據持久化的Hibernate框架結合起來開發遙感信息發布系統,提高系統的實用性、靈活性,克服傳統Web系統的缺點。

MVC設計模式和開源框架

1、MVC設計模式

MVC設計模式是一種著名的用戶界面軟件開發設計模式,它是模型-視圖-控制器(Model-View-Controller)縮寫。

MVC設計模式最早由Xerox在20世紀八十年代為Smaltalk-80語言發展提出的,但是這種設計思想並沒有局限於該語言,而是被廣泛地應用到了其他面向對象的編程語言中。

圖1 MVC模型組件關系圖

在MVC設計模式中,它把應用程序分成了3個核心部分,原理圖如圖1所示。

⑴ 模型(Model)

模型封裝了用戶數據和處理數據的業務邏輯,體現了應用程序的當前狀態,而且可以將用戶數據狀態的變化提供給多個顯示該數據的視圖共用。模型是應用程序的核心。

⑵ 視圖(View)

視圖提供了用戶界面,是用戶和應用程序的交互的窗口,既接受用戶輸入,也把模型數據狀態顯示給用戶,但是視圖不負責任何業務邏輯處理,僅僅是將用戶輸入數據傳遞給控制器或將模型數據顯示給用戶。

⑶ 控制器(Controller)

控制器連接了模型和視圖,根據用戶請求判斷將請求交給哪個模型來完成,然後調用視圖來顯示模型處理後的用戶請求結果。

MVC設計模式將應用程序進行了分層,視圖和模型通過控制器連接,從而減少了用戶界面和業務邏輯之間的耦合,使程序設計更加清晰、靈活,也提高了軟件的可擴展性、可維護性。

2、Struts框架

Struts框架是Apache開源軟件聯盟(www.apache.org)的一個開源項目——Jakarta Struts Framework。Struts框架繼承了MVC設計模式的特性,遵守了J2EE的Servlet、JSP等技術規范,並且根據J2EE的特點做了相應的變化和擴展,是J2EE體系架構的一種輕量級實現。作為一款優秀的Java Web應用程序的開發框架,Struts框架憑借其清晰性、靈活性,成為當前最為廣泛應用的輕量級Java Web 開發框架。

Struts框架實現了MVC設計模式,其工作原理圖如圖2所示:

圖2 Struts框架原理圖

⑴ 控制器的實現

Struts框架中采用了ActionServlet和Action類以及Struts-config.xml配置文件作為控制器的實現。

其中,Struts-config.xml配置文件配置了不同用戶請求及對應的具體業務邏輯組件來供ActionServlet類查詢。

ActionServlet類是中心Servlet,負責處理所有的用戶請求。當用戶提出請求,ActionServlet類最先對請求進行處理,它將根據Struts-config.xml配置文件將用戶請求映射到具體的Action類;而當Action類調用模型組件處理好用戶請求,並返回了處理結果後,仍然由ActionServlet類根據Struts-config.xml配置文件將結果轉發到視圖提供給用戶,或者轉發另外一個Action做進一步處理。

Action類實現了具體的業務邏輯,它接受用戶的輸入,然後調用具體的模型組件來完成用戶請求。

⑵ 視圖的實現

Struts構架主要采用了JSP作為視圖的實現,它提供了豐富的JSP標簽庫支持應用程序的開發,而且引入了ActionForm組件(實質為JavaBean)作為用戶表單的封裝來完成數據的傳輸。

⑶ 模型的實現

Struts框架對模型——即復雜的數據持久化層沒有提供太多的支持,但是這也就是說開發人員有更多自由來選擇合適量級的持久化技術,比如Hibernate、EJB等等。

Struts框架實現了MVC設計模式,但是它是典型的表現層框架,對模型的實現是不足的,所以有必要引入其他架構加強對模型的實現。

3、Hibenate框架

Hibernate框架是開放源代碼的對象關系映射工具(Object-Relational Mapping),是一款基於Java環境的優秀的對象持久化開發框架。它根據O/R(對象/關系)映射技術思想,對JDBC進行了輕量級封裝,使開發人員可以使用一種面向對象的方式來操縱和管理關系數據庫,所以從技術本質上來說該框架是一種提供面向對象的數據庫服務中間件。

Hibernate框架位於應用程序的業務化和持久化層,在運行時的體系結構如圖3所示:

SessionFactory接口,是一個數據庫映射關系的內存映像,它是線程安全的,所以可以為多個線程同時調用產生Session,是Session的工廠,另外它為事務之間可以重用的數據提供了可供選擇的二級緩存。

圖3 Hibernate運行時體系結構圖

Session接口,是Hibernate框架的運行中心,它被用戶程序調用,提供與持久化相關的諸多操作,如加載、添加、查詢、更新和刪除持久化對象,是實現用戶程序持久化工作的主要接口,所以Session被稱為持久化管理器。

Transaction接口,是用來指定原子操作的單元范圍,它通過對底層具體的JDBC、JTA等事務進行封裝和抽象,形成一個統一的事務操作界面。

此外,Hibernate還有兩個重要的核心接口:Configuration接口和Query和Criteria接口。Configuration接口是用來對Hibernate配置和啟動。Query和Criteria接口是用來執行對數據庫的查詢,且支持HQL、SQL多種查詢方式,其中HQL是一種面向對象的查詢語言。

遙感信息發布系統的設計

遙感信息發布系統是基於地面站遙感數據信息的發布系統,包括了用戶信息模塊,數據浏覽模塊,數據訂購模塊等。

1、系統的體系機構設計

根據前面介紹可以看到Hibenate架構只具備數據持久化設計能力,而Struts架構則在模型設計方面能力薄弱,所以將二者結合起來使用,共同搭建系統結構實現MVC模型設計,可以達到二者優勢互補,從而使系統設計具備低耦合性以及較高的可維護性和可擴展性。本系統的體系結構設計如圖4所示:

圖4 系統體系結構圖

本系統具有多個模塊,但是各個模塊的設計原理相同,其中用戶登錄設計典型地利用了Struts框架和Hibernate框架的設計,體現了兩種架構結合的特點,下面以此實現為代表進行具體闡述。

2、用戶登錄模塊設計

用戶登錄模塊,即用戶從浏覽器輸入個人信息,由系統在數據庫中檢索數據,然後驗證用戶信息,如果驗證成功登陸到系統界面,否則,提示用戶信息出錯。

2.1 數據持久層設計

數據持久層基於Hibernate架構,采用了DAO設計模式。在持久層設計中,包括了以下三個重要設計步驟:

首先,把用戶信息封裝為VO(Value Object)。VO是一組值對象,只包含了一些屬性和getter/setter方法的POJO(Plan Old Java Bean)。典型設計如下:

public class OrAdmin implements Serializable{
  private String adminname;
  public String getAdminname()
  { return adminname; }
  Public void setAdminname(String adminname)
  { this.adminname = adminname; }
  ……
}

其次,采用了DAO設計模式和抽象工廠設計模式,完成了 DAO工廠和Hibernate 數據庫操作的具體實現,典型設計如下:

public abstract class DAOFactory {
  public static DAOFactory getInstance() {}
  public abstract AdminDAO createAdminDAO();
}
public class AdminDAOImpl implements AdminDAO {
  public OrAdmin getAdmin(String adminName) {
   try {
    Session s =HibernateUtil.currentSession();
    Query query = s.createQuery("from OrAdmin as oa whereoa.adminname='"+adminName+"'");
   }……
   return null;
  }
}

最後,利用了Hibernate的配置文件完成從應用程序到數據庫的映射,典型設計如下:

<session-factory >
  <property name="connection.driver_class">
   org.postgresql.Driver
  </property>
  <property name="connection.url">
   jdbc:postgresql://127.0.0.1:5432/DBInfo
  </property>
  <property name="dialect">
   org.hibernate.dialect.PostgreSQLDialect
  </property>
  <mapping resource="OrAdmin.hbm.xml" />
  ……
</session-factory>

在該層的設計中,VO的信息封裝體現了面向對象設計編程思想;DAO的設計模式和抽象工廠模式減弱了上層調用和具體實現之間的耦合;Hibernate配置實現了數據庫高移植性,只需要改變Hibernate配置文件,不用修改程序設計就可以完成不同數據庫之間的更換。

2.2 業務邏輯層設計

業務邏輯層包含了供客戶端程序調用的業務邏輯規則,以幫助客戶端完成業務操作。該層采用了業務代理、DAO和抽象工廠設計模式,典型設計如下:

public class ManagerFactory {
  public static AdminManager
  createAdminManager(){
   return new AdminManagerImpl();
  }
}
public interface AdminManager {
  OrAdmin getAdmin(String username);
}
public class AdminManagerImpl implements
AdminManager{
  private AdminDAO dao =DAOFactory.getInstance().createAdminDAO();
  public OrAdmin getAdmin(String username)
  { return this.dao.getAdmin(username); }
}

在該層的設計中,業務代理、DAO和抽象工廠設計模式的使用,使業務邏輯更加靈活,如果具體業務發生變化,在表示層和數據持久化層改變很小就可以完成改變,這種設計增強了系統的可維護性和靈活性。

2.3 表示層設計

表示層基於Struts框架,采用了JSTL標簽庫技術。在表示層的設計中,主要包括了以下三個重要設計步驟:

首先,建立用於用戶浏覽的JSP視圖頁面,其中最重要的是設計出封裝用戶表單信息的ActionForm。ActionForm是Struts架構的重要組件,是包含了一些屬性和getter/setter方法的POJO,典型設計如下:

public class AdminActionForm extends ActionForm {
  private String adminname;
  public String getAdminname()
  { eturn adminname;}
  public void setAdminname(String adminname)
  { his.adminname = adminname; }
  ……
}

其次,搭建用戶請求和業務邏輯之間的橋梁——Action組件,該組件負責把用戶信息和具體的業務邏輯處理聯系在一起,典型設計如下:

public class AdminAction extends Action {
  AdminActionForm adminActionForm =(AdminActionForm) actionForm;
  adminname=adminActionForm.getAdminname();
  adminpasswd=adminActionForm.getAdminpd();
  AdminManager adminManager=ManagerFactory.createAdminManager();
  OrAdmin orAdmin=adminManager.getAdmin(adminname);
  if(orAdmin == null||!orAdmin.getAdminpasswd().equals(adminpasswd)){
   servletRequest.getSession().setAttribute("loginfail","Invalid name or password. Login failture");
   return actionMapping.findForward("logout");
  }else{
   servletRequest.getSession().setAttribute("adminname",adminname);
   return actionMapping.findForward("success"); 
  }
}

最後,通過Struts配置連接ActionForm和Action,完成一個業務設計,典型配置如下:

<form-beans>
  <form-bean name="adminActionForm" type="com.rice.web.struts.from.AdminActionForm" />
</form-beans>
<action-mappings>
  <action name="adminActionForm" path="/adminAction" scope="session" type="com.
rice.web.struts.action.AdminAction"validate="false">
   <forward name="success" path="/manager/main.jsp" />
   <forward name="logout" path="/manager/index.jsp" />
  </action>
</action-mappings>

該層設計中,JSTL標簽的使用簡化了JSP頁面,使頁面設計和表示層業務邏輯分離,提高了應用程序的可維護性;Struts架構的引入,使應用程序實現了MVC設計模式,結構清晰,提高了系統的可擴展性。

總結

本文介紹了MVC設計模式以及Struts和Hibernate框架的工作原理,利用了他們的優點互補,有機地將Struts+Hibernate框架結合起來構建了一個遙感信息發布系統,克服了傳統Web信息系統的缺點,提高了系統的可維護性、可擴展性,降低了系統地耦合性。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved