Web框架——XWAF的程式碼結構和執行機制(4)
XWAF是一套基於Servlet和java反射技術的Web應用程式框架,它利用Servlet執行機制在伺服器上載入和執行,接管客戶端請求,依靠ServletRequest物件獲取使用者請求資訊,使用ServletResponse物件返回處理結果。
XWAF框架能夠擴充套件Web伺服器的功能,簡化Web應用程式的開發,減少使用者編碼,提高開發效率。XWAF框架能夠智慧整合使用者程式碼,完成使用者專案的業務邏輯。
1、Web專案的使用者程式碼
使用XWAF框架開發Web專案,程式設計師需要編寫與專案業務邏輯直接相關的資料庫指令碼、
2、XWAF的框架程式碼
引入XWAF框架壓縮包程式碼檔案後,XWAF框架提供了大量程式碼,按照它們的任務不同可以分為“管理程式碼”和“功能程式碼”兩部分。
管理程式碼負責組織、整合使用者程式碼。包括:解析配置檔案、建立資料庫連線物件,掃描並解析使用者攔截器和處理器、建立使用者程式碼管理器、
功能程式碼則是提供某些應用功能的通用程式碼模組。包括:實現檔案的上傳下載、日誌管理、XML解析、JSON解析、java物件轉換為JSON表示式,以及WebSocket通訊助理等等。可以幫助程式設計師大大減少程式設計的複雜度和工作量,提高開發效率。
3、XWAF框架的類結構
XWAF框架的全部程式碼,按照功能模組分別存放在以“com.xwaf”為母包的18個java型別包中,分別是:
1)com.xwaft包:存放
2)com.xwaf.account包:存放XWAF框架的賬戶管理類。
3)com.xwaf.annotation包:存放XWAF框架的註解定義類。
4)com.xwaf.control包:存放XWAF框架的核心管理類。
5)com.xwaf.data包:存放XWAF框架的資料公共類。
6)com.xwaf.data.sql包:存放XWAF框架的資料服務類。
7)com.xwaf.date包:存放XWAF框架的日期和日曆工具類。
8)com.xwaf.exception包:存放XWAF框架的異常定義類。
9)com.xwaf.http包:存放XWAF框架與HTTP訪問相關的類。
10)com.xwaf.io包:存放XWAF框架的檔案管理類。
11)com.xwaf.io.http包:存放XWAF框架與HTTP相關的檔案管理類,如:上傳與下載管理。
12)com.xwaf.json包:存放XWAF框架與JSON資料相關的類。
13)com.xwaf.log包:存放XWAF框架的日誌管理類。
14)com.xwaf.reflect包:存放XWAF框架的反射技術工具類。
15)com.xwaf.text包:存放XWAF框架的文字管理類。
16)com.xwaf.validate包:存放XWAF框架與密碼驗證、MD5和手機驗證相關的類。
17)com.xwaf.websocket包:存放XWAF框架與WebSocket通訊和推送技術相關的類。
18)com.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 建立Interceptor和Handler介面卡
XWAF框架建立Interceptor介面卡,用於管理使用者專案的攔截器類資訊;建立Handler介面卡,用於管理使用者專案的處理器類和方法資訊。
4.5 掃描使用者專案的程式碼包
XWAF框架使用PackageScanner類包掃描器,掃描配置檔案中指定的攔截器和處理器程式碼包,將獲取的HttpInterceptor和WebSocketInterceptor類資訊提交給框架的Interceptor介面卡,獲取的HttpHandler和WebSocketHandler型別及其處理方法的資訊,提交給Handler介面卡。
4.6 建立資料伺服器
該資料伺服器包含資料來源和連線池物件,為資料訪問提供支援。該物件使用WebAppManager的getDataServer(String projName)靜態方法獲取。
4.7 建立登入賬號管理器
XWAF框架使用記憶體管理器監控所有登入失敗和鎖定的賬號,為控制使用者的登入行為提供簡便方法,簡化開發程式設計。該物件使用WebAppManager的getLoginAccountManager()靜態方法獲取。
4.8 建立級別管理器
XWAF框架會自動建立“使用者角色、業務分類、管理範圍”和“資料操作”等級別管理器(GradeManager物件),為使用者許可權管理提供便利。程式設計師可以使用WebAppManager的如下方法獲取相應的級別管理器:
1)getRuleGradeManager()方法:獲取角色級別管理器物件;
2)getWorkTypeManager()方法:獲取業務分類級別管理器物件;
3)getEntityManager()方法:獲取管理範圍級別管理器物件;
4)getDataOperateManager()方法:獲取資料操作級別管理器物件;
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靜態類管理使用者專案的全部攔截器和處理器,包括HTTP和WebSocket的攔截器和處理器。
1)getHttpHandlerInfo(String)方法:提取與URL匹配的HttpHandler類和方法;
2)getWsHandlerInfo(String)方法:提取與URL匹配的WebSocketHandler類和方法;
3)getHttpInterceptorInfo(String)方法:提取與URL匹配的IHttpInterceptor類;
4)getWsInterceptorInfo(String)方法:提取與URL匹配的IWebSocketInterceptor類。
4.11 響應使用者請求
XWAF框架的XwafDispatchServlet物件是伺服器響應客戶請求的排程器,它會到介面卡中查詢與請求的URL匹配的攔截器和處理器,並執行相應的方法。將處理結果返回給瀏覽器。
4.12 使用攔截機制實現切面開發
XWAF框架排程器在執行處理器之前和之後呼叫執行攔截器程式碼的機制,很方便地實現了面向切面的開發模式。如果程式設計師在處理器寫好之後,想要插入一個新功能,直接新增一個攔截器即可。
4.13 整合應用功能程式碼包
XWAF框架集成了許多專項應用功能的通用程式碼模組,包括:檔案的上傳下載、日誌管理、XML解析、JSON解析、java物件轉換為JSON表示式,以及WebSocket通訊助理等等。使用者在自己的程式碼中直接引用即可,將幫助程式設計師大大減少程式設計的複雜度和工作量,提高開發效率。