李啟銳,陳曉龍
工作中到各個辦公室辦理業務是不可避免的,但是經常遇到這種問題:當帶好材料到辦公室門口才發現,由于辦公室人員出差或其它原因,辦公室暫停對外開放,讓人白走一趟。解決這個問題的常用方法是出門之前先往該辦公室電話預約。
造成“吃閉門羹”的主要原因是辦公室的開放信息不能被方便地查詢。為此,本文分析了辦公室開放信息的建立、發布和查詢流程,設計了一個辦公室開放信息系統。在該系統中,通過網絡就可以查詢到所需信息,既不影響他人工作,又可以節省電話資源。
為了使用方便和提高跨平臺性,系統采用 B/S架構模式,基于SSH框架技術實現。
系統主要實現辦公室信息的設置與查詢,包括辦公室信息管理、用戶管理、辦公室狀態設置和辦公室狀態查詢 4個功能模塊。辦公室分為兩個級別:第一級別是以大的機關處室為單位,如教務處等;第二級別是機關處室下的各個科室,如教育管理科等。機構信息包括名字、負責人、職能描述、地址等信息。辦公室的信息包括名字、負責人、地址、職能描述等信息,二級科室還包括辦公室狀態信息,狀態分為正常、出差、開會、休假 4種。系統的用戶主要分為 3類,第一類是系統管理員,可以進行辦公室信息管理和用戶管理;第二類是辦公室人員,這類用戶分屬于各個二級科室,可以登錄系統設置辦公室的狀態信息;第三類是普通用戶,只能查詢辦公室的狀態信息。用戶管理包括對第二類用戶信息進行添加、刪除和修改。
SSH是目前流行的Java開源框架組合,它提出了一種開發 J2EE應用的輕量級解決方案[1]。利用 SSH 整合框架可以開發出一個分層的、易維護、可復用的企業級應用系統[2]。
Struts2是一個可擴展的 JAVAEE Web框架,它不是Struts1的簡單升級,而是從 Web Work升級而來的新版Struts[3],它集成了輸入校驗、國際化、類型轉換、攔截器、標簽庫等常用的Web編程技術。
Struts2實現了 MVC設計模,提供了開發MVC系統的底層支持。它將應用程序分解為業務模型、控制器和視圖三大模塊,降低了各模塊之間的耦合度,提高應用程序的可維護性和重用性。
在Struts2中,FilterDispatcher作為主控制器由Struts2框架提供,它接收視圖傳送過來的請求,并分發到各個分控制器(Action)來處理。Action負責對某一個或多個特定的頁面請求的響應,調用相應的業務邏輯來處理,并把結果數據提交到視圖顯示給用戶。Action由開發人員根據需要編寫。Struts2使用 stuts.xml來定義請求與Action、請求與處理方法、處理結果與視圖之間的對應關系。stuts.xml是 Struts2的核心配置文件,與 Struts2相關的特殊配置項目都在該文件中設置。
Spring框架的目標是解決企業應用開發的復雜性,具有兩大核心功能:控制反轉(IoC, Inversion of Control)和面向切面編程(AOP, Aspect Oriented Programming)。
IoC又稱為依賴注入(DI, Dependency Injection),其思想是當某個Java實例(調用者)需要另一個Java實例時,不再需要調用者創建被調用者實例,這個工作由外部的協調者(如Spring容器)來完成。在這種設計模式中,對象與對象之間的依賴關系被從代碼中分離出來,通過配置文件進行動態管理,使得程序耦合度非常松散,對象的更換變得相當簡單。
AOP是一種通過預編譯方式和運行期動態代理技術,實現了在不修改源代碼的情況下給程序動態統一添加功能的技術。利用這種技術可以將一些通用功能從不相關的類中分離出來,能夠使很多類共享一個行為,提高程序的重用性。這樣,一旦這種行為發生變化,不必修改很多類,只需要修改這個行為即可,提高程序的開發效率。Spring的事務處理就是AOP技術的典型應用。
Hibernate是一個面向 Java環境的輕量級ORM(Object/Relation Mapping )工具,其作用是對Java類與關系數據庫表進行映射,完成數據的持久化,同時提供數據的查詢、一致性檢查、事務管理等機制[3]。應用Hibernate,程序員可以完全使用面向對象的思維去操作數據庫,不必關心數據庫連接、事務處理等細節問題,這些細節的處理在傳統的使用SQL和JDBC編程中是不可避免的。因此,程序員可以從繁重的數據庫操作中釋放出來,集中精力處理系統的業務邏輯。另外,有了映射機制,程序代碼中不再需要出現如數據表名等數據庫元數據信息,進行數據庫移植時不需要修改代碼,提高系統的靈活性。
Web 應用分層思想把一個Web應用程序分為表示層、業務邏輯層和數據存取層三個層次。與MVC模式相對應,表示層包含MVC模式中的視圖與控制器,而業務邏輯層和數據存取層則組成MVC模式中的模型。結合3 個框架各自的特點及Web 應用分層思想,得出SSH整合的策略。Struts2實現了 MVC模式,有優秀用戶交互功能,因此把 Struts2作為MVC的承載者,主要實現表示層功能。Hibernate是最好的ORM工具之一,使用它可以簡化數據庫的操作,主要用來實現數據存取層功能。整合過程以Spring 框架為核心:第一,使用它的Ioc機制實現表示層、業務邏輯層、數據存取層之間的相互調用,降低各層之間的耦合度;第二,使用AOP機制實現數據存取層事務的統一管理,進一步簡化數據庫的操作。
在軟件體系架構設計中, 分層式結構是最常見, 也是最重要的一種結構[4]。系統使用三層結構設計,分別為表示層、業務邏輯層和數據存取層。基于SSH的整合實現,得出系統的總體結構,如圖1所示:

圖1 系統三層結構模型
在此模型中,按照不同的功能把程序分3個層次,邏輯上相互獨立。層次之間的調用通過 Spring的依賴注入技術實現,與一般的MVC模式相比較,程序更深層次地降低了模塊之間的耦合度,大大提高了程序的簡單性和可維護性。使用 Hibernate和 Spring進行數據持久化操作,與傳統的JDBC相比較,降低了程序復雜度,減少了一些重復性的工作,提高開發效率。
(1)表示層設計
表示層實現MVC模式中的視圖與控制器功能。該層為用戶提供一種交互式的操作界面,主要應用Struts2技術實現,方便調用其標簽庫、輸入校驗、攔截器等功能。Struts2首先接收用戶的請求,把用戶的輸入通過 Action轉發給相應的業務邏輯層來處理。接收到處理結果后調用相應的視圖顯示給用戶。
控制器與視圖之間的數據傳輸主要通過 Action類中定義的屬性(提供getter和setter)及部分Servlet API來實現。主控制器通過解析struts.xml來實現不同的請求分發給不同的子控制器,并根據不同處理結果調用不同的視圖來顯示。
(2)業務邏輯層設計
業務邏輯層是針對具體問題的處理。該層根據表示層的請求,對輸入的數據進行加工處理后把結果返回給表示層。處理過程如果需要數據庫支持,則調用數據存取層從數據庫中存取數據。
(3)數據存取層設計
數據存取層負責一切數據庫操作,主要用Hibernate技術實現。同時使用 Spring進行統一的事務管理,把所有事務交給Spring自動完成處理,這只需要在Spring的核心配置文件中 applicationContext.xml中配置即可。Hibernate與Spring整合之后,DAO組件類還可以繼承 Sping提供的HibernateDaoSupport類,該類把數據庫的操作過程封裝成模板。使用模板可以大大簡化操作數據庫的程序。
根據以上結構模型,系統的程序中至少有Action組件、Service組件和DAO組件需要編寫。這3種組件之間的相互調用由 Spring動態注入完成,其本質是根據面向對象中多態性的特點,使用接口編程實現。Action類通常從 Struts2框架提供的ActionSupport中繼承,因為ActionSupport中已經定義好一些通用的用戶交互功能,如輸入檢驗等。Dao組件通常繼承Sping提供的HibernateDaoSupport類,簡化操作數據庫的編程方法。另外,系統中還有與關系數據表映射的持久化PO類。因此,得出系統的類圖,如圖2所示:

圖2 系統類圖
由于篇幅原因部分接口和類未在圖中列出。
基于SSH的系統可以很好地實現表現層、業務邏輯層及數據存取層的相互獨立, 使系統具有很好的穩定性、可擴展性和可維護性,并能提高系統的開發效率。但目前這三個層次往往是在相同的應用程序服務器上運行,對于大型的軟件系統,容易造成服務器的負擔過重,如何有效地把 3個層次進行分開部署和運行,是值得繼續深入研究的問題。
[1]周文瓊,王樂球,湯君武, 曾慶斌.基于SSH呼叫中心排班系統的設計與實現.軟件導刊[J], 2011(4):53-55
[2]李雷孝,劉曉軍,劉利民,包力.基于 SSH 整合框架的科研項目管理系統的設計與實現.[J].內蒙古農業大學學報,2012(1):210-214
[3]張紅衛, 賈松濤,李曉,王磊.基于SSH的多語種構件庫管理系統的設計與實現[J].計算機應用軟件,2010(5):139-142
[4]楊鐘鳴.基于 SSH框架的社區管理信息系統設計[J].東華理工大學學報(自然科學版),2010(4):379-383