自己搭建一個聯網題庫系統(java SERVER)

導語

在線題庫系統是很多企業及學校必備的一個軟件,它兼具考核,評估,診斷等多種功能,方便了企業和高校對於學生或員工的考核管理,因此,在線題庫系統在如今已經佔有一個舉足輕重的地位,所以,做好題庫系統不僅決定了工作的本身,更是公司企業能否成功的最重要的一環。我們必須有能力,有必要完成好這項任務,下面,我們開始一步一步搭建在線題庫系統

架構選擇

架構的比較

兩種選擇

SSH 通常指的是 Struts2 做控制器(controller),spring 管理各層的組件,hibernate 負責持久化層。

SSM 則指的是 SpringMVC 做控制器(controller),Spring 管理各層的組件,MyBatis 負責持久化層。

自己搭建一個聯網題庫系統(java SERVER)

Struts2 的實現原理

針對於控制器的選擇

1.Struct和Spring-MVC都是負責取轉發的,但是兩者針對request的請求上面區別很大,Struct是針對一個Action類來進行請求的,即一個Action類對應於一個請求,所以對應得失類攔截器,請求的數據類共享。而Spring-MVC則是針對於方法級別的請求的,也就是一個方法對應於一個請求,屬於方法攔截,請求的數據方法不共享。

2.Spring-MVC的配置文件相對來說較容易上手,可以提高軟件開發的效率。

3.Spring-MVC是基於Servlet級別的而Struct的級別是Filter級別的。

struts攔截器

1. Struts2攔截器是在訪問某個Action或Action的某個方法,字段之前或之後實施攔截,並且Struts2攔截器是可插拔的,攔截器是AOP的一種實現,而Filter是責任鏈的一種實現.

2. 攔截器棧(Interceptor Stack)。Struts2攔截器棧就是將攔截器按一定的順序聯結成一條鏈。在訪問被攔截的方法或字段時,Struts2攔截器鏈中的攔截器就會按其之前定義的順序被調用。

二、Struts2 攔截器接口實現:

說到這裡,可能有的人會不懂,攔截器和過濾器有什麼區別?

(1)過濾器:

依賴於servlet容器。在實現上基於函數回調,可以對幾乎所有請求進行過濾,但是缺點是一個過濾器實例只能在容器初始化時調用一次。使用過濾器的目的是用來做一些過濾操作,獲取我們想要獲取的數據,比如:在過濾器中修改字符編碼;在過濾器中修改HttpServletRequest的一些參數,包括:過濾低俗文字、危險字符等

(2)攔截器:

依賴於web框架,在struts中就是依賴於依賴框架。在實現上基於Java的反射機制,屬於面向切面編程(AOP)的一種運用。由於攔截器是基於web框架的調用,因此可以使用Spring的依賴注入(DI)進行一些業務操作,同時一個攔截器實例在一個controller生命週期之內可以多次調用。但是缺點是隻能對controller請求進行攔截,對其他的一些比如直接訪問靜態資源的請求則沒辦法進行攔截處理

ssh框架的好處

1. 典型的三層構架體現MVC實現,可以讓開發人員減輕重新建立解決複雜問題方案的負擔和精力。便於敏捷開發出新的需求,降低開發時間成本。

2. 良好的可擴展性,ssh主流技術有強大的用戶社區支持它,所以該框架擴展性非常強,針對特殊應用時具有良好的可插拔性,避免大部分因技術問題不能實現的功能。

3. 良好的可維護性,業務系統經常會有新需求,三層構架因為邏輯層和展現層的合理分離,可使需求修改的風險降低到最低。隨著新技術的流行或系統的老化,系統可能需要重構,ssh構架重構成功率要比其他構架高很多。

4. 優秀的解耦性,提高了內聚,降低了耦合,很少有軟件產品的需求從一開始就完全是固定的。客戶對軟件需求,是隨著軟件開發過程的深入,不斷明晰起來的。因此,常常遇到軟件開發到一定程度時,由於客戶對軟件需求發生了變化,使得軟件的實現不得不隨之改變。ssh三層構架,控制層依賴於業務邏輯層,但絕不與任何具體的業務邏輯組件耦合,只與接口耦合;同樣,業務邏輯層依賴於DAO層,也不會與任何具體的DAO組件耦合,而是面向接口編程。採用這種方式的軟件實現,即使軟件的部分發生改變,其他部分也不會改變。

所以我們選擇ssh框架

搭建ssh框架

struts流程圖

自己搭建一個聯網題庫系統(java SERVER)

請求流程圖

2、spring的流程圖:  

自己搭建一個聯網題庫系統(java SERVER)

 解析:上圖是在struts結構圖的基礎上加入了spring流程圖,在web.xml配置文件中加入了spring的監聽器,在struts.xml配置文件中添加“”是告知Struts2運行時使用Spring來創建對象,spring在其中主要做的就是注入實例,將所有需要類的實例都由spring管理。

2、hibernate的核心架構和執行流程圖:

自己搭建一個聯網題庫系統(java SERVER)

自己搭建一個聯網題庫系統(java SERVER)

搭建一個完整的SSH框架項目

(1) 基於配置文件的整合:

我們需要在web.xml中定義一個Struts2的filter:

第三步:在web.xml中配置一個監聽器,因為如果我們要加載applicationContext.xml,然而action是多實例的,如果每請求一次action就要加載一次xml的話,這會使得你的整個項目效率十分低 下,因此,我的想法是把applicationContext.xml文件放在servletContext中,只加載一次,因此我們就需要配置一個servletContext的監聽器。

自己搭建一個聯網題庫系統(java SERVER)

第四步:先開始Struts2與Spring的整合:先把service,dao,entity,action這些層次建好

Struts2自己管理action的方式:

自己搭建一個聯網題庫系統(java SERVER)

action交給Spring管理:

自己搭建一個聯網題庫系統(java SERVER)

action交給Spring管理的話,Struts.xml文件裡action的class不應該寫全類名,只需要寫Spring裡的id名即可,並且 要設置scope="prototype",因為action是多例的!!

自己搭建一個聯網題庫系統(java SERVER)

傳統方式要通過類來getBean獲取service,而這裡只需要配置一下常量就可以在action裡不需要通過註解或者配置 文件就可以對service直接進行調用,只需要設置一下setService方法即可!!

第五步:Spring與Hibernate的整合:

有兩種方式:

自己搭建一個聯網題庫系統(java SERVER)

二、要配置事務管理哦!!

之所以直接注入sessionFactory就可以調用模板,你打開HibernateDaoSupport類,可以發現,在裡面有個setSessionFactory方法裡,創建了template

自己搭建一個聯網題庫系統(java SERVER)

同時要再業務層(service層,用以控制事務)加上:

自己搭建一個聯網題庫系統(java SERVER)

(2)無Hibernate配置文件形式

在Spring中就要配置好Hibernate的一些屬性:

1.c3p0連接池的信息:

自己搭建一個聯網題庫系統(java SERVER)

2.hibernate常用屬性:

自己搭建一個聯網題庫系統(java SERVER)

3.映射關係:

自己搭建一個聯網題庫系統(java SERVER)

關於在dao層查詢出來的result,如果要傳到web層的話,可能在service層就已經將事務關閉,因此在web層不能及時的接收到要獲取的對象,因此我們要在web層開啟事務!!

自己搭建一個聯網題庫系統(java SERVER)

(2) 基於註解的整合:

第1-3步:前三步和上面的xml形式整合是一樣的,就不細說了!

第四步:創建一個處理請求的Action

自己搭建一個聯網題庫系統(java SERVER)

第五步:註冊處理請求實體:

自己搭建一個聯網題庫系統(java SERVER)

第六步:之後就是事務管理器的註冊和模板注入。


分享到:


相關文章: