1. 程式人生 > >Web框架——XWAF的程式碼結構和執行機制(4)

Web框架——XWAF的程式碼結構和執行機制(4)

    XWAF是一套基於Servletjava反射技術的Web應用程式框架,它利用Servlet執行機制在伺服器上載入和執行,接管客戶端請求,依靠ServletRequest物件獲取使用者請求資訊,使用ServletResponse物件返回處理結果。

    XWAF框架能夠擴充套件Web伺服器的功能,簡化Web應用程式的開發,減少使用者編碼,提高開發效率。XWAF框架能夠智慧整合使用者程式碼,完成使用者專案的業務邏輯。

1、Web專案的使用者程式碼

  使用XWAF框架開發Web專案,程式設計師需要編寫與專案業務邏輯直接相關的資料庫指令碼、

HTMLJSP頁面、處理訪問請求的攔截器和處理器程式碼、實現業務邏輯的服務層程式碼、資料訪問層程式碼等。由於這些程式碼與專案的具體業務相關,且千變萬化,框架不可能事先得知,必須由專案開發人員根據需求完成設計和編碼。我們將這些與專案的業務聯絡緊密、個性化很強的程式碼稱為“使用者程式碼”。

2、XWAF框架程式碼

  引入XWAF框架壓縮包程式碼檔案後,XWAF框架提供了大量程式碼,按照它們的任務不同可以分為“管理程式碼”和“功能程式碼”兩部分。

  管理程式碼負責組織、整合使用者程式碼。包括:解析配置檔案、建立資料庫連線物件,掃描並解析使用者攔截器和處理器、建立使用者程式碼管理器、

Web訪問監聽器、匹配Web請求與攔截器和處理器的介面卡、控制攔截器與處理器執行順序的排程器等應用程式的骨架程式碼。

  功能程式碼則是提供某些應用功能的通用程式碼模組。包括:實現檔案的上傳下載、日誌管理、XML解析、JSON解析、java物件轉換為JSON表示式,以及WebSocket通訊助理等等。可以幫助程式設計師大大減少程式設計的複雜度和工作量,提高開發效率。

3、XWAF框架的類結構

    XWAF框架的全部程式碼,按照功能模組分別存放在以“com.xwaf”為母包的18java型別包中,分別是:

1com.xwaft包:存放

XWAF框架的公共基礎類。

2com.xwaf.account包:存放XWAF框架的賬戶管理類。

3com.xwaf.annotation包:存放XWAF框架的註解定義類。

4com.xwaf.control包:存放XWAF框架的核心管理類。

5com.xwaf.data包:存放XWAF框架的資料公共類。

6com.xwaf.data.sql包:存放XWAF框架的資料服務類。

7com.xwaf.date包:存放XWAF框架的日期和日曆工具類。

8com.xwaf.exception包:存放XWAF框架的異常定義類。

9com.xwaf.http包:存放XWAF框架與HTTP訪問相關的類。

10com.xwaf.io包:存放XWAF框架的檔案管理類。

11com.xwaf.io.http包:存放XWAF框架與HTTP相關的檔案管理類,如:上傳與下載管理。

12com.xwaf.json包:存放XWAF框架與JSON資料相關的類。

13com.xwaf.log包:存放XWAF框架的日誌管理類。

14com.xwaf.reflect包:存放XWAF框架的反射技術工具類。

15com.xwaf.text包:存放XWAF框架的文字管理類。

16com.xwaf.validate包:存放XWAF框架與密碼驗證、MD5和手機驗證相關的類。

17com.xwaf.websocket包:存放XWAF框架與WebSocket通訊和推送技術相關的類。

18com.xwaf.xml包:存放XWAF框架的XML解析工具類。

 

4、XWAF框架的執行機制

    XWAF基於Servlet規範和Java反射技術Web應用程式框架,在Web伺服器上載入和執行。它包括XWAF框架管理程式碼和專項應用技術功能程式碼,框架管理程式碼建立的物件和工作任務包括:

4.1  執行WebAppListener監聽器

    WebAppListener監聽器是XWAF框架的入口程式,它的contextInitialized(ServletContextEvent)方法會在ServletContext物件初始化時被執行。XWAF框架藉此方法和ServletContext物件建立XWAF框架的核心管理器“WebAppManager”物件。

4.2  建立WebAppManager物件

  隨著WebAppManager物件的建立,XWAF框架開始了“解析配置檔案、掃描型別包、建立全部管理物件”等管理應用程式的準備工作。

4.3  解析XwafConfig.xml配置檔案

  通過解析配置檔案,獲取資料庫連線引數、使用者攔截器和處理器的類包名稱、檔案上傳約定等重要資訊,並返回配置資訊管理器(XwafConfig)物件。

4.4  建立InterceptorHandler介面卡

    XWAF框架建立Interceptor介面卡,用於管理使用者專案的攔截器類資訊;建立Handler介面卡,用於管理使用者專案的處理器類和方法資訊。

4.5  掃描使用者專案的程式碼

    XWAF框架使用PackageScanner類包掃描器,掃描配置檔案中指定的攔截器和處理器程式碼包,將獲取的HttpInterceptorWebSocketInterceptor類資訊提交給框架的Interceptor介面卡,獲取的HttpHandlerWebSocketHandler型別及其處理方法的資訊,提交給Handler介面卡。

4.6  建立資料伺服器

  該資料伺服器包含資料來源和連線池物件,為資料訪問提供支援。該物件使用WebAppManagergetDataServer(String projName)靜態方法獲取。

4.7  建立登入賬號管理器

    XWAF框架使用記憶體管理器監控所有登入失敗和鎖定的賬號,為控制使用者的登入行為提供簡便方法,簡化開發程式設計。該物件使用WebAppManagergetLoginAccountManager()靜態方法獲取。

4.8  建立級別管理器

    XWAF框架會自動建立“使用者角色、業務分類、管理範圍”和“資料操作”等級別管理器(GradeManager物件),為使用者許可權管理提供便利。程式設計師可以使用WebAppManager的如下方法獲取相應的級別管理器:

1getRuleGradeManager()方法:獲取角色級別管理器物件;

2getWorkTypeManager()方法:獲取業務分類級別管理器物件;

3getEntityManager()方法:獲取管理範圍級別管理器物件;

4getDataOperateManager()方法:獲取資料操作級別管理器物件;

4.9  接管Web請求

   XWAF使用com.xwaf.control.XwafDispatchServlet類例項接管客戶請求,為了保持XWAF框架接管請求的靈活性,XwafDispatchServlet類沒有使用註解指定匹配的URL,而是交給專案開發人員在web.xml檔案中配置。如果開發人員希望所有的客戶請求都交給XWAF處理,只要將<servlet-mapping><url-pattern>子節點設定為“/*”即可。使用XWAG外掛建立使用者專案的程式碼時,會自動配置為“*.handl”,即只接管副檔名為“handl”的客戶請求,程式碼如下所示:

<servlet-mapping>

     <servlet-name>XwafDispatchServlet</servlet-name>

     <url-pattern>*.handl</url-pattern>

</servlet-mapping>

 

4.10  整合使用者程式碼

    XWAF框架使用XwafHandlerAndInterceptorAdapter靜態類管理使用者專案的全部攔截器和處理器,包括HTTPWebSocket的攔截器和處理器。

1getHttpHandlerInfo(String)方法:提取與URL匹配的HttpHandler類和方法;

2getWsHandlerInfo(String)方法:提取與URL匹配的WebSocketHandler類和方法;

3getHttpInterceptorInfo(String)方法:提取與URL匹配的IHttpInterceptor類;

4getWsInterceptorInfo(String)方法:提取與URL匹配的IWebSocketInterceptor類。

4.11  響應使用者請求

    XWAF框架的XwafDispatchServlet物件是伺服器響應客戶請求的排程器,它會到介面卡中查詢與請求的URL匹配的攔截器和處理器,並執行相應的方法。將處理結果返回給瀏覽器。

4.12  使用攔截機制實現切面開發

    XWAF框架排程器在執行處理器之前和之後呼叫執行攔截器程式碼的機制,很方便地實現了面向切面的開發模式。如果程式設計師在處理器寫好之後,想要插入一個新功能,直接新增一個攔截器即可。

4.13  整合應用功能程式碼包

    XWAF框架集成了許多專項應用功能的通用程式碼模組,包括:檔案的上傳下載、日誌管理、XML解析、JSON解析、java物件轉換為JSON表示式,以及WebSocket通訊助理等等。使用者在自己的程式碼中直接引用即可,將幫助程式設計師大大減少程式設計的複雜度和工作量,提高開發效率。