1. 程式人生 > >maven+spring+springmvc+hibernate+easyui的真實專案經歷

maven+spring+springmvc+hibernate+easyui的真實專案經歷

3.框架描述

3.1 工程專案結構

1.       基於springMVC+spring+maven+hibernate+easyUI架構的MVC模式

2.       告警系統的專案是由Eclipse Luna建立,專案包含了:許可權控制、超大附件檔案上傳、調色盤外掛、EasyUI基本元件使用等等功能。

3.       專案在Eclipse中的工程截圖

1.       利用IoC(Inversion of Control)控制反轉,物件建立責任的反轉,在springBeanFacotoryIoC容器的核心介面,負責例項化,定位,配置應用程式中的物件及建立這些物件間的依賴。XmlBeanFacotory

實現BeanFactory介面,通過獲取xml配置檔案資料,組成應用物件及物件間的依賴關係

2.   利用Aop縱向的程式設計,與其往每個業務中都新增同樣的程式碼,不如寫一遍程式碼,讓兩個業務共同使用這段程式碼。

3.   spring在工程中的配置截圖

1.   用了MVC架構模式的思想,將web層進行職責解耦,使用請求-響應模型,框架的幫助簡化開發

2.   Spring Web MVC請求處理流程

a)       首先使用者傳送請求————>前端控制器,前端控制器根據請求資訊(如URL)來決定選擇哪一個頁面控制器進行處理並把請求委託給它,即以前的控制器的控制邏輯部分

b)      頁面控制器接收到請求後,進行功能處理,首先需要收集和繫結請求引數到一個物件,這個物件在

Spring Web MVC中叫命令物件,並進行驗證,然後將命令物件委託給業務物件進行處理;處理完畢後返回一個ModelAndView(模型資料和邏輯檢視名)

c)       前端控制器收回控制權,然後根據返回的邏輯檢視名,選擇相應的檢視進行渲染,並把模型資料傳入以便檢視渲染

d)      前端控制器再次收回控制權,將響應返回給使用者,至此整個結束

3.       Spring Web MVC核心架構

a)       首先使用者傳送請求——>DispatcherServlet,前端控制器收到請求後自己不進行處理,而是委託給其他的解析器進行處理,作為統一訪問點,進行全域性的流程控制

b)     

DispatcherServlet——>HandlerMapping HandlerMapping將會把請求對映為HandlerExecutionChain物件(包含一個Handler處理器(頁面控制器)物件、多個HandlerInterceptor攔截器)物件,通過這種策略模式,很容易新增新的對映策略

c)       DispatcherServlet——>HandlerAdapterHandlerAdapter將會把處理器包裝為介面卡,從而支援多種型別的處理器,即介面卡設計模式的應用,從而很容易支援很多型別的處理器

d)      HandlerAdapter——>處理器功能處理方法的呼叫,HandlerAdapter將會根據適配的結果呼叫真正的處理器的功能處理方法,完成功能處理;並返回一個ModelAndView物件(包含模型資料、邏輯檢視名)

e)       ModelAndView的邏輯檢視名——> ViewResolver ViewResolver將把邏輯檢視名解析為具體的View,通過這種策略模式,很容易更換其他檢視技術

f)       View——>渲染,View會根據傳進來的Model模型資料進行渲染,此處的Model實際是一個Map資料結構,因此很容易支援其他檢視技術

g)       返回控制權給DispatcherServlet,由DispatcherServlet返回響應給使用者,到此一個流程結束

Maven是一個專案管理工具,它包含了一個專案物件模型(Project Object Model),一組標準集合,一個專案生命週期(Project Lifecycle),一個依賴管理系統(DependencyManagement System),和用來執行定義在生命週期階段(phase)中外掛(plugin)目標(goal)的邏輯。當你使用Maven的時候,你用一個明確定義的專案物件模型來描述你的專案,然後Maven可以應用橫切的邏輯,這些邏輯來自一組共享的(或者自定義的)外掛。Maven 有一個生命週期,當你執行 mvn install 的時候被呼叫。這條命令告訴 Maven 執行一系列的有序的步驟,直到到達你指定的生命週期。遍歷生命週期旅途中的一個影響就是,Maven 運行了許多預設的外掛目標,這些目標完成了像編譯和建立一個 JAR 檔案這樣的工作。此外,Maven能夠很方便的幫你管理專案報告,生成站點,管理JAR檔案,等等

1.       結構圖

a)       maven目錄結構為src/main/java的格式也可以新增測試目錄,自動生成程式碼在target目錄中

b)      使用pom.xml檔案進行jar包的版本控制,其中可以有依賴關係的管理

2.       倉庫管理

Nexus 是Maven倉庫管理器,如果你使用Maven,你可以從Maven中央倉庫 下載所需要的構件(artifact),但這通常不是一個好的做法,你應該在本地架設一個Maven倉庫伺服器,在代理遠端倉庫的同時維護本地倉庫,以節省頻寬和時間,Nexus就可以滿足這樣的需要。此外,他還提供了強大的倉庫管理功能,構件搜尋功能,它基於REST,友好的UI是一個extjs的REST客戶端,它佔用較少的記憶體,基於簡單檔案系統而非資料庫。這些優點使其日趨成為最流行的Maven倉庫管理器。

a)       Nexus是一種開源的倉庫管理工具,有良好的目錄結構和許可權管理和資源管理,只需訪問配置網路地址

b)      點選左邊導航欄的Repositories,介面的主面板會顯示所有一個所有倉庫及倉庫組的列表,你會看到它們的Type欄位的值有group,hosted,proxy,virtual。這裡我們不關心virtual,只介紹下另外三種類型:

c)      hosted,本地倉庫,通常我們會部署自己的構件到這一型別的倉庫。

d)     proxy,代理倉庫,它們被用來代理遠端的公共倉庫,如maven中央倉庫。

e)      group,倉庫組,用來合併多個hosted/proxy倉庫,通常我們配置maven依賴倉庫組。

3.       倉庫配置檔案在pom.xml中(本專案未部署)

Hibernate是一個持久化的框架,它對JDBC進行了輕量級的封裝。對於源程式來說沒有侵入性。能讓我們通過操作實體關係模型來操作資料庫。大大減輕了sql語句的書寫,事務的處理,查詢結果的管理等資料庫操作。

Hibernate的持久化類和關係資料庫之間的對映通常是用一個XML文件來定義的。該文件通過一系列XML元素的配置,來將持久化類與資料庫表之間建立起一一對映。這意味著對映文件是按照持久化類的定義來建立的,而不是表的定義

1.   利用spring的管理進行資料庫的連線和快取的配置檔案管理

2.   利用Maven的版本控制對所以來的jar包進行載入

3.   利用對映關係建立實體pojo類,總動建立到資料空

4.   利用hql編寫基本資料操作方法,便於統一管理

5.   實體類對映圖

jQuery EasyUI是一組基於jQueryUI外掛集合,幫助web開發者更輕鬆的打造出功能豐富並且美觀的UI介面。開發者不需要編寫複雜的javascript,也不需要對css樣式有深入的瞭解,開發者需要了解的只有一些簡單的html標籤。

1.       控制元件使用簡單,只需在專案中加入相應的外掛

2.       功能jsp頁面引用例項

3.       easyui控制元件是一個封裝好的jquery和js方法的集合體,對於頁面與後臺資料之間的互動提供便利

1.       以前,我們為了寫一個還看得過去的按鈕,得先在HTML裡面加入按鈕,然後在CSS裡面寫入樣式,又用JS控制它的事件,整個按鈕寫下來,我們已經快被煩死了,擡起頭看看,我們還有label,dropList,text......等N多個這樣的東西要寫。後來有了JQuery了,我們的日子似乎好過了點兒,嘗試過EasyUI,忽然就又體會到了封裝的好處。

2.       EasyUI控制元件便於統一管理,功能的通用性省去了很多不必要的麻煩,比如頁面整體格調的不統一,後期的維護,開發的管理...

3.       EasyUI 控制元件在不斷地更新,對於以後的功能擴張和BUG的修復都具有很好的幫助

4. 架構理解

1.   清晰的角色劃分:前端控制器(DispatcherServlet)、請求到處理器對映(HandlerMapping)、處理器介面卡(HandlerAdapter)、檢視解析器(ViewResolver)、處理器或頁面控制器(Controller)、驗證器(   Validator)、命令物件(Command 請求引數繫結到的物件就叫命令物件)、表單物件(Form Object提供給表單展示和提交到的物件就叫表單物件)。

2.   分工明確,而且擴充套件點相當靈活,可以很容易擴充套件,雖然幾乎不需要;

3.   由於命令物件就是一個POJO,無需繼承框架特定API,可以使用命令物件直接作為業務物件;

4.   Spring其他框架無縫整合,是其它Web框架所不具備的;

5.   可適配,通過HandlerAdapter可以支援任意的類作為處理器;

6.   可定製性,HandlerMappingViewResolver等能夠非常簡單的定製;

7.   功能強大的資料驗證、格式化、繫結機制;

8.   利用Spring提供的Mock物件能夠非常簡單的進行Web層單元測試;

9.   本地化、主題的解析的支援,使我們更容易進行國際化和主題的切換。

10.強大的JSP標籤庫,使JSP編寫更容易。

11.還有比如RESTful風格的支援、簡單的檔案上傳、約定大於配置的契約式程式設計支援、基於註解的零配置支援等等。

1.  方便重用,如果你有一個新的swing專案需要用到app-daoapp-service,新增對它們的依賴即可,你不再需要去依賴一個WAR。而有些模組,如app-util,完全可以漸漸進化成公司的一份基礎工具類庫,供所有專案使用。這是模組化最重要的一個目的。

2.  由於你現在劃分了模組,每個模組的配置都在各自的pom.xml裡,不用再到一個混亂的紛繁複雜的總的POM中尋找自己的配置。

3.  如果你只是在app-dao上工作,你不再需要build整個專案,只要在app-dao目錄執行mvn命令進行build即可,這樣可以節省時間,尤其是當專案越來越複雜,build越來越耗時後。

4.  某些模組,如app-util被所有人依賴,但你不想給所有人修改,現在你完全可以從這個專案結構出來,做成另外一個專案,svn只給特定的人訪問,但仍提供jar給別人使用。

5.    多模組的Maven專案結構支援一些Maven的更有趣的特性(如DepencencyManagement),這留作以後討論

1.   JDBC訪問資料庫的程式碼做了封裝,大大簡化了資料訪問層繁瑣的重複性程式碼。

2.   Hibernate是一個基於JDBC的主流持久化框架,是一個優秀的ORM實現。他很大程度的簡化DAO層的編碼工作

3.   hibernate使用Java反射機制,而不是位元組碼增強程式來實現透明性。

4.   hibernate的效能非常好,因為它是個輕量級框架。對映的靈活性很出色。它支援各種關係資料庫,從一對一到多對多的各種複雜關係。

1.   基於jquery使用者介面外掛的集合

2.   為一些當前用於互動的js應用提供必要的功能

3.   EasyUI支援兩種渲染方式分別為javascript方式(如:$('#p').panel({...}))和html標記方式(如:class="easyui-panel"

4.   支援HTML5(通過data-options屬性)

5.   開發產品時可節省時間和資源

6.   簡單,但很強大

7.   支援擴充套件,可根據自己的需求擴充套件控制元件

8.   目前各項不足正以版本遞增的方式不斷完善