版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、基于 struts 2+spring+jpa 框架的 web 應用 的通用整合方法研究宋偉(北京郵電大學網絡技術研究院,北京 100876)摘要:目前,在支持 web 應用開發(fā)的眾多技術中,j2ee 開發(fā)以其優(yōu)秀的框架技術得到越來越多的企業(yè)級 web 服務開發(fā)者的青睞。本文對當前比較流行的三種框架 struts2 框架,spring 框架和 jpa 框架的整合方法進行了研究。整合后的系統(tǒng)能夠充分發(fā)揮三種框架的優(yōu)勢,幫 助開發(fā)者快速開發(fā)出高質量的 web 服務。關鍵詞: 計算機軟件;struts 2;spring;jpa;web 應用;框架整合中圖分類號:tp31an general appro
2、ach to implememt web serviceintegrated with struts 2+spring+jpa frameworkssong wei(state key laboratory of networking and switching technology, beijing university of posts andtelecommunications, beijing 100876)abstract: nowadays, j2ee gain more and more attention among various web developmemt techno
3、logies, because it has excellent frameworks. this paper proposes an general approach tointegrate three most popular frameworks, that are struts2 framework, spring framework and jpaframework into web service application. the integrated web system shares the advantages of the above threee frameworks,
4、as a result, this integration method do much benefits to help web developers toimplement rapid and high-quality web services.key words: computer software; structs 2; spring; jpa; web application; framework integration0引言對于企業(yè)級的 web 服務開發(fā)來講,需求的變更和項目期限的嚴格是軟件開發(fā)人員面臨 的兩大難題。首先,大型的企業(yè) web 服務需要由大量的模塊組成,模塊的數(shù)量眾多
5、,模塊 之間的關系錯綜復雜。如果開發(fā)階段對應用的層次沒有進行合理劃分和高效的組織,那么當 需求發(fā)生變更的時候,會出現(xiàn)牽一發(fā)而動全身的尷尬場景。其次,在軟件開發(fā)日益工程化的 今天,除了保證高質量的軟件開發(fā)外,敏捷的開發(fā)過程也是成功的關鍵,組件化的開發(fā)可以 節(jié)省編碼時間。因此,需要抽取已經成熟的,穩(wěn)定的代碼,將這部分優(yōu)秀的代碼做成框架, 使開發(fā)人員不必進行重復的工作,就可以寫出有用基本功能的 web 服務,然后可以集中精 力完成核心業(yè)務邏輯。而這一切的實現(xiàn)都要依賴對于現(xiàn)有框架的整合,因此本文將主要研究 如何整合目前比較流行的三種框架:struts2,spring 和 jpa。本文第一部分首先對 s
6、truts 框 架,spring 框架和 jpa 框架做了簡要的介紹,分析了各種框架的主要優(yōu)勢和使用特性。在 第二部分中,總括性地講解了使用三種框架搭建的 web 應用的系統(tǒng)架構,主要包括數(shù)據(jù)庫 持久化層和實體類層,數(shù)據(jù)訪問對象層,業(yè)務邏輯層,控制層,表現(xiàn)層五層,同時對每層的 主要職能進行了詳細闡述。本文在第三部分中提出了基于三種框架的通用整合方法,包括對作者簡介:宋偉(1985-05),男,移動互聯(lián)網. e-mail: sw15118配置文件的理解和編寫等。在這種通過整合方法的支持下,web 服務開發(fā)者的開發(fā)速度會得到提升,同時框架的高質量而穩(wěn)定的代碼也保證了 web 應用的質量,降低了維護
7、的成本。1struts2+spring+hibernate 框架簡介1.1struts 框架struts2 是一種 mvc 的框架,主要實現(xiàn)了視圖和控制器的分離,其核心是 web work2.0. 為了能夠能夠實現(xiàn)視圖和控制器的分離,它使用大量的能夠截獲用戶請求的攔截器。當用戶 發(fā)送 http 請求的時候,核心控制器根據(jù)用戶的請求找到對應的 action,然后將用戶的參數(shù) 傳遞給 action 中對應的處理函數(shù),并按照執(zhí)行該函數(shù),進行業(yè)務邏輯處理。當業(yè)務邏輯處 理完成后,系統(tǒng)會根據(jù)配置文件中指定的結果返回給請求的發(fā)出者,返回的結果不僅限于 jsp,也可以是其他的視圖,比如文件,圖像等。1.2s
8、pring 框架spring 是一個輕量級 j2ee 框架,實質上是一個 bean 工場,能夠很好地完成對 javabeans 的管理,使得開發(fā)更加便捷,組織更加合理有效。其最重要的功能是控制反轉和面向切面的 編程。前者可以使對象擺脫對依賴的查詢,框架會主動將對象所關聯(lián)的依賴注入給對象。后 者則有利于實現(xiàn)業(yè)務分離,它將核心業(yè)務代碼從和常規(guī)業(yè)務代碼分離開來,讓開發(fā)者更加關 注于業(yè)務的實現(xiàn)。1.3jpa 框架jpa 是一個支持對象關系映射數(shù)據(jù)持久化的 j2ee 框架。它的全稱是 java persistence api,它可以將運行時的對象和數(shù)據(jù)庫中的數(shù)據(jù)進行關聯(lián),只需要對實體對象進行修改就可 以
9、將更新持久化到數(shù)據(jù)庫中。jpa 框架對使用 jdbc 進行的 crud 操作進行進一步的封裝, 開發(fā)者可以無需編寫繁瑣的 sql 代碼就能夠完成對數(shù)據(jù)庫的操作。對于開發(fā)者來講,數(shù)據(jù)庫的增刪改查操作是透明的,只需要編寫 java 類就可以在數(shù)據(jù) 庫中生成對應的表,并且如果對實體類進行修改,在 web 服務器應用重新部署的時候,修 改可以被更新到數(shù)據(jù)庫中,這樣就將增刪改查等數(shù)據(jù)庫操作局限在 java 類的編寫中,提高 了開發(fā)的效率。2整合 struts+spring+jpa 的 web 系統(tǒng)架構設計系統(tǒng)總共可以劃分為 5 層,分別是位于最底層的數(shù)據(jù)庫持久化層和實體類層,第二層的 數(shù)據(jù)對象訪問層,第
10、三層的業(yè)務邏輯層,第四層的請求控制層,以及和用戶直接交互的表現(xiàn) 層。層間的具體實現(xiàn)是透明的,也就是說,每一層的操作都被包封在本層,上層的服務使用 本層提供的服務接口,本層的實現(xiàn)需要調用下一層的服務接口。由于不同層的服務不能看到彼此的具體實現(xiàn),層間的耦合度低,因此可以并行地開發(fā)各 個層的功能,提升開發(fā)效率。同時,層內聚合度高,出現(xiàn)的異常通常局限在一個很小的范圍 內,更容易排查錯誤。這種架構可以大大節(jié)省開發(fā)和維護的成本(如圖 1 所示)jsp 頁面 表現(xiàn)層strutsaction 層請求控制層business logic業(yè)務邏輯層springdao 層數(shù)據(jù)訪問對象vo 層實體類mysql 數(shù)據(jù)庫j
11、pa圖 1 struts+spring+jpa 的 web 系統(tǒng)架構設計a)系統(tǒng)的最底層是 vo 層和數(shù)據(jù)庫層,這兩層主要負責數(shù)據(jù)的持久化。vo 層中對應一系 列的 java 實體類,這些實體類使用 jpa 框架提供的方法進行注釋。 比較常用的注釋包括:將 java 類持久化到數(shù)據(jù)庫的對應表的entity 注釋,支持 sql 語句增刪改查的namedquery 注釋,將 java 實體類屬性對應成數(shù)據(jù)庫中指定列的column 注釋,指定數(shù)據(jù)庫表的一對多關系,多對一關系,多對多關系和一對關系的onetomany, manytoone,manytomany, onetoone 注釋等1。b)系統(tǒng)的
12、第二層是數(shù)據(jù)訪問對象層,這一層主要負責對實體對象的增刪改查操作,不涉及 任何業(yè)務邏輯。數(shù)據(jù)訪問對象層使用第一層提供的接口來實現(xiàn)本層的服務,同時向第三 層提供服務接口。dao 層對應一系列的 java 類,這里的類和 vo 層的每一個類一一對應,也就是說,對 于 vo 層的每一個類,dao 層都有一個唯一個同名的類。這些類都繼承自一個公共的 父類 genericdao 類。對單個對象的通用數(shù)據(jù)操作都放在父類當中。對于單一對象的操 作通常有:向數(shù)據(jù)庫中添加一個對象,刪除一個對象,修改一個對象,根據(jù)對象的 id 查找對象等。 子類除了通過繼承的方式獲得父類的通用方法外,還可以實現(xiàn)非共用的方法。比如,
13、除 了可以使用父類的根據(jù)對象的唯一 id 來查找對象的方法外,還可以實現(xiàn)根據(jù)對象的名 字,或者對象入庫的時間等屬性來查找對象的方法,這些方法的返回結果通常不是唯一 的一個對象,而是滿足查詢參數(shù)的一組對象。c)系統(tǒng)的第三層是業(yè)務邏輯處理層,這一層主要負責業(yè)務邏輯處理。業(yè)務邏輯層使用第二層提供的接口來實現(xiàn)本層的服務,同時向第四層提供服務接口。business logic 層對應一系列的 java 類,這里類和 dao 層的每一個類一一對應。也就 是說,對于 dao 層的每一個類,business logic 層都有一個同名的類對應,用來完成和該 dao 層相關的邏輯處理。d)系統(tǒng)的第四層是請求控制
14、層,這一層主要負責用戶請求的轉發(fā),處理和返回。請求控制 層使用第三層提供的接口來實現(xiàn)本層的服務,同時向第五層開放服務接口。 用戶發(fā)送的 http 請求經過攔截器攔截之后,系統(tǒng)會將請求轉發(fā)給相應 action 類中的指定函數(shù)來處理,根據(jù)函數(shù)的處理結果,系統(tǒng)會返回給用戶結果視圖,它可以是網頁文件, 也可以是其他類型的文檔。上述的請求和 action 中函數(shù)之間的對應關系是由配置文件指定 的,需要在運行系統(tǒng)之前做相應的配置。e)系統(tǒng)的第五層是表現(xiàn)層,這一層主要負責網頁的顯示,以及用戶和系統(tǒng)的交互。struts2框架使用 ognl 表示語言完成了 jsp 頁面的顯示數(shù)據(jù)和 action 層的數(shù)據(jù)的一一
15、對應。 對于在 action 中定義的屬性,只要編寫了 setter 和 getter 函數(shù),就相當于將這個屬性暴 露給了前臺網頁頁面,那么 struts2 框架就會將數(shù)據(jù)自動綁定到對應的頁面標簽上。反 過來,action 也可以通過這個已經暴露的屬性自動獲得提交自前臺頁面的該屬性的值。 struts2 提供了強大的頁面標簽,比如, , 和等, 能夠快捷地實現(xiàn)后臺屬性和前臺各種控件的數(shù)據(jù)交互和數(shù)據(jù)綁定。3框架整合的配置方案在一個標準 web 服務器架構中,必須在 webapp/webcontent 目錄下放置一個 web.xml 配置文件,通過對這個文件進行配置,可以將想要支持的框架添加到這個
16、 web 服務器應用 當中。本文的目的是將 struts 框架,spring 框架和 jpa 框架分別整合到一個 web 服務器應用 中,因此需要將關于上述三個框架的配置代碼都添加到 web.xml 配置文件中。下面是基于 struts2,spring 和 jpa 的 web 服務系統(tǒng)的基本目錄結構。3.1配置 web.xml3.1.1增加 stucts 功能當 web 服務器應用啟動之后,系統(tǒng)會自動加載 web.xml 配置文件并對其進行解析,再 按順序依次加載各種框架的支持。對于 struts 框架來說就是加載核心控制器 filedispatcher 類。當用戶發(fā)送 http 請求到服務器
17、指定模式的 url 時,核心控制器 filedispatcher 類就會攔截 用戶的 http 請求,并轉發(fā)給相應的 action 進行進一步的業(yè)務邏輯處理。因此,需要在 web.xml 文件中配置過濾器,也就是標簽,同時過濾器對應的類指定為 filedispatcher 類,也就是標簽2。配置實例如下:struts2org.apache.struts2.dispatcher.filterdispatcher用戶想 web 服務器應用發(fā)送 http 請求,只有符合指定 url 模式的請求才會被系統(tǒng)攔截。 因此需要在 web.xml 配置文件中配置過濾器映射,也就是標簽。配置實例如 下:stru
18、ts2/*3.1.2增加 spring 功能當 web 服務器應用啟動之后,系統(tǒng)會自動加載 web.xml 配置文件并對其進行解析,再 按順序依次加載各種框架的支持。對于 spring 框架來說,就是加載上下文加載監(jiān)聽器 contextloaderlistener2。配置實例如下:org.springframework.web.context.contextloaderlistenerspring 框架對系統(tǒng)各層的 bean 進行統(tǒng)一管理,這些 bean 被統(tǒng)一配置在一個配置文件中, 我們需要在 spring 框架的配置文件中指定存放 bean 配置的文件路徑。需要對上下文參數(shù)進 行配置,也就
19、是標簽。將 bean 所在的配置文件路徑填到屬性中3。配置實例如下:contextconfiglocationclasspath:context.xml3.1.3增加 jpa 功能當 web 服務器應用啟動之后,系統(tǒng)會自動加載 web.xml 配置文件并對其進行解析,再 按順序依次加載各種框架的支持。對于 jpa 框架來說就是加載 openentitymanagerinview filter 類2。配置實例如下:jpafilterorg.springframework.orm.jpa.support.openentitymanagerinviewfilter3.2配置 struts.xmlst
20、ruts 框架會自動加載并解析 struts.xml 配置文件。struts.xml 配置文件中指定了系統(tǒng)支 持的所有的 action,這些 action 用來處理來自用戶的 http 請求。對 action 層進行配置主 要指配置繼承自 struts-default 的包,也就是標簽。其中,標簽所描述的內 容就是系統(tǒng)所支持的 action,它的 name 屬性指定了處理函數(shù)的名稱,這個名稱是對于請求用戶來講的;它的 method 屬性指定了處理的方法,這個名稱是對于 action 來說的。用戶只能夠訪問 name 屬性指定的名字,action 只能含有 method 指定的方法,而配置文件完
21、成了 兩者之間的一一對應。標簽指定了和 action 對應的處理的類型,可以是頁面輸入, 也可以是結果返回,還可以是頁面的重定向,或者是返回文件等4。配置實例如下:web-inf/pages/test.jspweb-inf/pages/test.jsp3.3配置 application.xml3.3.1請求控制層的 bean 配置spring 框架統(tǒng)一管理各個層的 bean,對于 action 層的所有 bean,需要指定和 bean 對 應的 action 類的路徑。配置一個 bean 使用標簽,標簽的 id 屬性可以唯一訪問該 bean, 標簽的 class 屬性指定了和 bean 關聯(lián)的
22、 action 的類的路徑5 。配置實例如下:3.3.2業(yè)務邏輯層的 bean 配置spring 框架統(tǒng)一管理各個層的 bean,對于邏輯處理層的所有 bean,需要指定和 bean 對應的業(yè)務邏輯處理類的路徑。配置一個 bean 使用標簽,標簽的 id 屬性可以唯一訪 問該 bean,標簽的 class 屬性指定了和 bean 關聯(lián)的業(yè)務邏輯處理類的路徑5。配置實例如下:3.3.3數(shù)據(jù)訪問層的 bean 配置spring 框架統(tǒng)一管理各個層的 bean,對于數(shù)據(jù)訪問對象層的所有 bean,需要指定和 bean 對應的數(shù)據(jù)訪問對象類的路徑。配置一個 bean 使用標簽,標簽的 id 屬性可以唯
23、一訪 問該 bean,標簽的 class 屬性指定了和 bean 關聯(lián)的數(shù)據(jù)訪問對象類的路徑。除了需要配置 數(shù)據(jù)訪問對象類之外,還需要配置數(shù)據(jù)訪問對象所能使用的數(shù)據(jù)源5。配置實例如下:在數(shù)據(jù)源的參數(shù)中還需要指定數(shù)據(jù)庫的類型,數(shù)據(jù)庫驅動的類型,數(shù)據(jù)庫的地址,能夠合法訪問數(shù)據(jù)源的用戶名,訪問密碼等,這些參數(shù)可以提取出來放在一個叫做 perties 的配置文件中。然后需要在 application.xml 中指定 perties 配置文件的路徑,以便從 中獲取參數(shù)來完成對各種 bean 的配置。配置實例如下:classpath:perties3.4其他配置文件spring 框架會自動加載 perties 配置文件,該文件包含了數(shù)據(jù)庫連接的相關參數(shù)。 數(shù)據(jù)庫驅動,數(shù)據(jù)庫地址,數(shù)據(jù)庫的訪問用戶名和用戶密碼,這些屬性會被數(shù)據(jù)訪問層的配 置文件使用到6。配置實例如下:jdbc.driverclassname=com.mysql.jdbc.driver jdbc.url=jdbc:mysql:/localhost:3306/test jdbc.username=rootjdbc.password=000 hibernate.database=mysql4結論使用上述的架構設計和配置
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 國畫故宮課件教學課件
- 2024年保衛(wèi)服務合同
- (完整版)特種設備應急預案
- 2024年建筑工地木工班組勞務承包合同
- 2024年度生態(tài)補償機制實施合同
- 2024年應急運輸響應合同
- 激勵學生課件教學課件
- 2024年度教育設備采購與維護合同
- 2024年度歐洲汽車制造與銷售合同
- 2024年大宗商品物流合同
- 醫(yī)院電氣安全知識培訓
- 上海市虹口區(qū)2024學年第一學期期中考試初三物理試卷-教師版
- 2024-2025學年八年級上學期英語期中模擬試卷(譯林版+含答案解析)
- 駕駛證學法減分(學法免分)試題和答案(50題完整版)1650
- 半期評估試卷(1-4單元)-2024-2025學年四年級上冊數(shù)學北師大版
- python程序設計-說課
- XX學校推廣應用“國家中小學智慧教育平臺”工作實施方案
- 失業(yè)保險待遇申請表
- 220KV線路運維實施方案
- 計算材料學實驗(燕友果)實驗七利用 material studio研究晶體材料性能
- 網格員個人述職報告范文
評論
0/150
提交評論