ajax
提要 即時的資料校正是AJAX技術的重要優點之一,Struts校正架構通過加入這種技術進一步豐富了其MVC,從而使得Web應用程式的開發效果更接近於傳統型應用程式。
一、 引言
校正架構的根本目的是實現域校正。在Web應用程式中有許多方法可以實現域校正,總體上可以分為兩類:伺服器端和用戶端。其中,Struts校正架構是適合於基於Java的Web應用程式環境最好的架構之一。它可以使用伺服器端校正來配置應用程式並且使用在校正過程(在請求處理期間啟用)中產生的錯誤訊息;而且它也可以通過在請求頁面上產生的JavaScript來實現用戶端校正。
AJAX是一種能非同步地調用伺服器並返回XML文檔的技術,近來十分流行。它的重要優點之一是能夠實現資料的即時校正。
本文將主要探討如何使用AJAX技術進一步增強現有Struts校正架構的功能。為此,我們必須開發幾個組件來實現選擇校正架構並且為用戶端產生指定格式的訊息,還要開發一個處理錯誤訊息產生的標籤庫。
二、 前提
你需要使用Windows作業系統,並安裝Eclipse整合式開發環境和Tomcat應用程式伺服器,還要確保在你的作業系統上已經註冊了MSXML 3.0 ActiveX對象。另外,你還需要Struts庫(http://struts.apache.org)和JDOM庫(www.jdom.org,用於XML開發),請分別參考下面的圖1和圖2。
圖2.ErrormessageHandler類層次圖 |
三、 伺服器端
StrustsActionServlet
首先,我們必須用這個類擴充org.apache.struts.action.ActionServlet類以建立一個servletMapping變數,並用此變數來儲存有關瀏覽器地址的action路徑的資訊。當添加代碼時,我們必須把web.xml配置為一個用於應用程式伺服器的Web應用程式描述器。
web.xml的配置如下:
... <servlet> <servlet-name>action</servlet-name> <servlet-class>net.sf.struts.servlet.StrutsActionServlet</servlet-class> ... <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> ... |
相應的StrutsActionServlet代碼看上去具有如下形式:
public class StrutsActionServlet extends the ActionServlet. { public String getServletMapping() { return this.servletMapping; } } |
AjaxValidationRequestProcessor
為了支援現有的Struts架構,我們必須擴充Struts包中的RequestProcessor類。為此,我們必須定製要求處理常式,其一是因為我們必須區分怎樣實現校正-使用現有的Struts架構還是使用基於AJAX的方案;其二是因為我們將在伺服器和用戶端之間在有關如何攔截訊息方面簽訂一種協約。在訊息產生過程中,我們使用的是XML格式-這是一種很好的媒體訊息發送格式。我們所使用的XML格式的定義如下:
XML Format
<?xml version="1.0" encoding="UTF-8"?> <message> <identity name=messageAreaId> <description> MessageValue </description> </identity> </message> |
描述
· Identity是用戶端JavaScript的ID,用於指明訊息應該放置的位置。
· Description是伺服器端建置錯誤訊息以後的結果。
首先,在處理映射前,我們需要從Web描述符中得到servlet映射配置資訊。啟用該過程後,應用程式就著手準備繼承自AjaxForm類的表單一實例。接下來的處理將管理AJAX校正並且應該進行檢查以確保來自用戶端的請求沒有使用Struts校正架構。在請求期間另外要實現,其一是處理收集的由用戶端發送到action表單的資訊的填充問題;其二是通過使用已經存在於父類AjaxValidationRequestProcessor(TilesRequestProcessor)中的現有Struts校正架構中的方法來處理校正問題。
TilesRequestProcessor中的校正過程將調用所有基於Struts校正架構的校正並且把action錯誤儲存到請求中。我們需要把action錯誤分析成片斷並產生將被發送到用戶端的XML訊息校正。既然我們想改變校正方式,那麼在校正過程中,我們應該檢查我們使用的是哪一種校正架構(見圖3)。
在此,我們把JDOM作為處理引擎並使用它產生XML訊息。如圖4所示,當開始校正並且所用校正架構是AJAX校正架構時,接下來要進行填充錯誤訊息並且構建XML訊息校正。
ErrorMessageHandler
這個類具有XML訊息構建器的功能,它基於identity和description屬性來構建XML訊息。在調用buildXMLMessage後,調用者就會準備文檔並設定XML訊息的根項目。這個類還有一個addNextXMLMessage函數,這個函數負責把其它校正訊息添加進XML(見原始碼中的列表1)。
AjaxValidationRequestProcessor類中的process方法負責把響應的content type設定為"text/xml"並且以字串形式發送XML訊息。該方法的代碼如列表2(見所附源碼)所示。
AjaxValidationRequestProcessor類中的processValidation方法負責填充action錯誤並且基於XML格式約定為用戶端構建訊息。此函數的代碼如下所示:
... ActionErrors errors = (ActionErrors) request.getAttribute(Globals.ERROR_KEY); Locale locale = (Locale) request.getAttribute(Globals.LOCALE_KEY); generateXMLMessage(errors, identity, locale, sbXMLMessage); ... |
[1] [2] 下一頁