分類: 工作問題
舉報框架
sshhibernate
spring
struts
dao大型企業級web應用系統的開發通常要求有乙個良好的軟體架構、便於協作開發和擴充套件公升級,而傳統的開發模式不能很好地滿足這些要求。本文針對當前web應用程式開發面臨的問題,結合目前比較流行的開源框架ssh(spring、struts、hibernate),提出一種開發j2ee 企業級web應用的輕量級解決方案,並通過案例具體說明如何將這一方案應用到實際專案中。
1 框架技術
著名的軟體大師ralph johnson對框架(framework)進行了如下的定義: 框架是整個系統或系統的一部分的可重用設計,由一組抽象的類及其例項間的相互作用方式組成[1]。
框架一般具有即插即用的可重用性、成熟的穩定性以及良好的團隊協作性。j2ee複雜的多層結構決定了大型的j2ee專案需要運用框架和設計模式來控制軟體質量。目前,市場上出現了一些商業的、開源的基於j2ee的應用框架,其中主流的框架技術有:基於mvc模式的struts框架和基於ioc模式的spring框架以及物件/關係對映框架hibernate等。
1.1 表示層框架struts
struts是乙個在jsp model2基礎上實現的mvc框架,主要分為模型(model)、檢視(viewer)和控制器(controller)三部分,其主要的設計理念是通過控制器將表現邏輯和業務邏輯解耦,以提高系統的可維護性、可擴充套件性和可重用性[2]。struts框架的體系結構如圖1所示。
圖一下面就圖1所示的體系結構圖分析struts框架中的mvc元件。
(1)檢視:檢視部分主要由jsp頁面組成,其中沒有流程邏輯、業務邏輯和模型資訊,只有標記。struts自身包含了一組標記庫(taglib),這也是struts的精華之一,靈活運用它們可以簡化jsp頁面的**,提高開發效率。
(2)控制器:struts中的controller主要是其自身提供的actionservlet。actionservlet接收所有來自客戶端的請求並根據配置檔案(struts-config.xml)中的定義將控制轉移到適當的action物件。
(3)模型:struts沒有定義具體model層的實現,model層通常是和業務邏輯緊密相關的,有持續化的要求。目前在商業領域和開源世界,都有一些優秀的工具可以為model層的開發提供便利。
1.2 業務邏輯層框架spring
spring是乙個解決了許多j2ee開發中常見問題並能夠替代ejb技術的強大的輕量級框架。這裡所說的輕量級指的是spring框架本身,而不是指spring只能用於輕量級的應用開發。spring的輕盈體現在其框架本身的基礎結構以及對其他應用工具的支援和裝配能力。與ejb這種龐然大物相比,spring可使程式研發人員把各個技術層次之間的風險降低。
spring框架的核心是控制翻轉ioc(inversion of control)/依賴注入di(dependence injection)機制。ioc是指由容器中控制項之間的關係(這裡,容器是指為元件提供特定服務和技術支援的乙個標準化的執行時的環境)而非傳統實現中由程式**直接操控,這種將控制權由程式**到外部容器的轉移,稱為「翻轉」[3]。di是對ioc更形象的解釋,即由容器在執行期間動態地將依賴關係(如構造引數、構造物件或介面)注入到元件之中[3]。spring採用設值注入(使用setter方法實現依賴)和構造子注入(在構造方法中實現依賴)的機制,通過配置檔案管理組建的協作物件,建立可以構造元件的ioc容器。這樣,不需要編寫工廠模式、單例模式或者其他構造的方法,就可以通過容器直接獲取所需的業務元件。spring框架的結構如圖2所示。
圖2圖3hibernate通過對jdbc的封裝,向程式設計師遮蔽了底層的資料庫操作,使程式設計師專注於oo程式的開發,有助於提高開發效率。程式設計師訪問資料庫所需要做的就是為持久化物件編制xml對映檔案[4]。
底層資料庫的改變只需要簡單地更改初始化配置檔案(hibernate.cfg.xml或者hibernate.properties)即可,不會對應用程式產生影響。
hibernate有自己的物件導向的查詢語言hql,hql功能強大,支援目前大部分主流的資料庫,如oracle、db2、mysql、microsoft sql server等,是目前應用最廣泛的o/r對映工具。hibernate為快速開發應用程式提供了底層的支援。
2 基於ssh組合框架的web應用模型設計與實現
2.1 整合ssh的新型j2ee框架
前面分析了基於j2ee的三種框架技術,下面通過整合以上三種框架技術來對傳統的j2ee web開發模型加以改進,以形成一種新的、輕量型的j2ee架構。
整合ssh框架的系統框架圖如圖4所示,系統從職責上分為四層:表示層、業務邏輯層、資料持久層和域模組層。其中使用struts作為系統的整體基礎架構,負責mvc的分離,在struts框架的模型部分,利用hibernate框架對持久層提供支援,業務層用spring支援。具體做法是:用物件導向的分析方法根據需求提出一些模型,將這些模型實現為基本的j**a物件,然後編寫基本的dao介面,並給出hibernate的dao實現,採用hibernate架構實現的dao類來實現j**a類與資料庫之間的轉換和訪問,最後由spring完成業務邏輯。
圖四在用ssh開發web應用時,需要對生成的各個類檔案進行組織,下面就對乙個可行的目錄方案進行介紹:譬如應用中有乙個使用者管理模組,則在公共包下建立乙個user包,如該公共包可以為com.simon.oa,
在user包下包括如下子包
1、controler包
該包放置各種struts的action。
2、dao包
該包放置各類dao(data access object),也就是放置對資料庫訪問的實現類,在用myeclipse中的「hibernate reverse engineering」進行反向操作時在某乙個目錄中就會生成對應某個表的dao,生成後可將該dao拖到dao包中。在某些應用中將dao作為介面,在該介面中包括所有對資料庫的操作方法,然後在dao包建立乙個hibernate包,在hibernate包中放置對dao介面的實現,譬如:userdao介面有乙個實現類為userdaoimpl,將該類放置到hibernate包中,實際的開發傾向於後一種方式,因為對這個dao介面可以實現spring的ioc操作。(不知道myeclipse對此是怎麼考慮的,這個問題讓我糾纏了很久,誤將dao理解成乙個能夠進行實際操作的類,而不是乙個介面,以後開發要注意)
3、model包
該包中放置hibernate反向工程生成的bean和該bean對應的.hbm.xml檔案。
4、service包
該包放置業務操作類,譬如使用者服務類,一般情況將該使用者操作類提取乙個介面,然後在service包下生成乙個impl包,在impl包中才放置使用者操作介面的實現類。該使用者介面實現類中呼叫dao介面對資料庫進行操作,而呼叫該實現類的方法在struts的action中。
5、vo包(value object)
vo包中的中包括struts中使用的pojo及actionform等資訊。
vo: value object
dto: data transfer object
個人理解vo和dto是類似的東西,原則上vo和dto只有public fields,主要用於程序之間資料傳遞的問題,vo和dto不會傳遞到表示層,在業務層就會被吸收。但看到很多人在建立vo和dto時,也含有setter,getter屬性和一些其它的輔助方法,這也無可厚非,我自己也不能確定這對不對。
springboot框架結構
dispatch2dao.xml templates.view 自定義包名 分類包名 html 頁面檔案 自定義 form 可用作 增 改 自定義 list 可用作 展示 自定義 view 可用作 檢視 base basecontroller 定義controller基類 base basedao ...
metasploit框架結構
輔助模組 aux 滲透攻擊模組 exploit 後攻擊模組 post 攻擊載荷模組 payloads 空指令模組 nops 編碼模組 encoders 規避 免殺 模組 evasion 載入其他模組 整合現有的一些外部安全工具 如nessus openvas漏洞掃瞄器等,為使用者介面提供一些新的功能...
Foundation框架 結構體
foundation框架 結構體 一 基本知識 foundation 基礎框架。框架中包含了很多開發中常用的資料型別,如結構體,列舉,類等,是其他ios框架的基礎。如果要想使用foundation框架中的資料型別,那麼包含它的主標頭檔案就可以了。即 import 補充 core foundation...