AJAX是最近在web開發流程中一次革命,它允許在一個普通的web瀏覽器中配置大量的動態效果。多年前Struts 都已經是Java-Web開發中的一個事實上的標準,在大量的應用中都已經使用了它。本文將告訴你,如何在你已經存在Struts應用中結合豐富的AJAX沒Ы涌凇?
本文將介紹在JSP頁面中包含一些JavaScript這樣一個簡單而有效的方法來結合AJAX和Struts。在此我們介紹如何重新使用已經存在的Struts actions,但此技術同樣可用于你選擇的其他Java-Web 框架。本方法同樣可平移到Struts或者JSF的下一個版本。
版權聲明:任何獲得授權的網站,轉載時請務必保留以下作者信息和鏈接
作者:Paul Browne;pawenwen(作者的blog:http://blog.matrix.org.cn/page/pawenwen)
原文:原文鏈接
關鍵字:Struts;AJAX
什么是AJAX?
AJAX是“異步的JavaScript和XML”的縮寫。這是一項技術,而不是一個如Struts一樣的框架。為什么在AJAX周圍會有這么多的關注呢?這是因為AJAX使web頁面看起來并不像一個平面的文檔,而更像用戶所期望的如桌面應用的動態GUI應用程序。AJAX技術能在很多的瀏覽器上使用(包括IE和Netscape/Mozilla)。它已經為Microsoft(用于Outlook的web客戶端)和Google(用戶Google Maps和Gmail)所使用。
未使用AJAX之前
目前大多數的Struts應用都是標準的“如同一個平面文檔的web頁面”的結構。如果你想模仿一些桌面應用程序(比如那些使用Java Swing,Visual Basic,或者Delphi建立的應用程序),那么你有兩個選擇:你可以發送所有的可能作為頁面的一部分被請求的信息,使用大量的JavaScript來操作其動態的顯示(一個很慢并且非企業級Java的方法);或者你可以不改變形式地提交到后臺服務器(一種有效的方法) 。AJAX提高給你了融合前面的最佳解決方案:動態的頁面,但是大多數的應用是在你的web服務器的Java程序來處理的。
AJAX 101
AJAX和現有的動態HTML技術非常相似,并在其上增加了一個發送到“后臺”服務器的請求來獲取需要的新的或者更新的信息。AJAX的機制在其他地方已經有詳細的說明――請查看本文后的Resources來獲取更多。但是你至少需要知道:
1. XMLHttpRequest (如果你使用的是IE瀏覽器的話,則是Microsoft.XMLHTTP的ActiveX的對象)。這些對象,你可以在web頁面中使用JavaScript調用。他們允許你作為后臺的調用方式來請求web服務器的內容(例如,在表單提交后,屏幕并不像平時一樣顯示“空白”)。
2. XMLHttpRequest 和Microsoft.XMLHTTP 返回的內容可以作為XML或者文本來處理。JavaScript(在你頁面上的)可以使用請求的新內容來更新頁面。
3. 整個處理過程可以由普通的JavaScript事件來觸發:onclick,onchange,onblur,等。
在你的Struts應用中使用AJAX
你閱讀了本文,然后你會對使用AJAX來創建動態的web頁面感興趣,并且想知道如何將它加入到你的Struts應用中。這只是選擇之一。那么你會如何選擇呢?
· 等待,知道Struts的下一個版本融合了AJAX技術。如果Struts開發者準備開發一個新的應用,這或許會是一個好的選擇。再后面,可能會是要求JSF也這樣做――對其本身并不一件壞事,但是對于已經存在的系統這將會帶來最根本的改變。
· 你也可以直接采用新的方法,比如Direct Web Remoting (DWR) 和Ruby on Rails,這些都是專為建立AJAX應用的。如果你考慮不使用Struts來開發web的話,那么這些都是很又用的框架,并且值得一試。但是,這也同時意味著你必須要重寫你的應用。
· 在你已經存在的Struts應用中增加AJAX。既然AJAX只是一項技術而并非框架,那么它就很容易融入到Struts中。作為現有的系統,其穩定性(如,保持現有的庫文件)是相當重要的。所以這個方法被推薦,并且我們將在后面詳細介紹。
我們選擇在Struts應用中增加AJAX的優勢是:
1. 它并不需要任何新的庫文件或者服務器代碼;只需要使用現有的Struts庫文件和action。
2. 解決方案中所有部分――JavaScript,XML,Java和Struts――早已為廣泛所知。
3. 此應用可以一塊一塊地移植到AJAX;我們可以確定哪些部分對用戶有益,并首先將它們更新到動態AJAX顯示。
實現方案
我們如何真正的貫徹我們的選擇呢?我們首先應該注意一個“標準的”(沒有AJAX)Struts應用是如何工作的。在此應用中,一個一般的事件流程如下:
1. 使用點擊超鏈接或者表單的提交按鈕,用戶發送請求。
2. web服務器運行處理請求的Struts Action來生成一個web頁面。
3. 瀏覽器顯示web頁面。
4. 當用戶點擊保存的時候,信息由Struts框架中一個ActionForm類來轉換并發送到服務器。
5. 然后,Struts框架調用Struts Action來出來請求(如,保存數據到數據庫中)。
6. 頁面再一次回傳,處理流程繼續。
現有的Struts應用
一個演示事件流程的簡單Struts應用可以在以下地址下載: struts-non-ajax.zip。此基于Struts的應用,是基于用戶的輸入顯示或者隱藏藍色和綠色的表格。圖1顯示了載入初始頁面的畫面。圖2顯示了用戶輸入值并點擊了提交后的畫面。雖然簡單,但它已經足以表示一個Struts的工作流程。
圖 1. 沒有AJAX的例子:初始屏幕
圖 2. 沒有AJAX的例子:輸入值并點擊了提交
服務器端的代碼是:一個Struts Action使用struts-config.xml 中定義的值轉發到(相同的)JSP。這個例子代碼中一些需要注意的地方是:
·struts-config.xml文件將所有的請求重定向到http://localhost:8080/struts-non-ajax/(或者和你自己的服務器相同)的index.jsp。
· index.jsp 包含了一個兩個文本框的Struts form(showBlue和showGreen)。該頁面同樣包含了標簽,但是如同兩個文本框被初始化為空,標簽之間的內容并不顯示。
· 用戶輸入值(true或者false)并點擊提交按鈕,處理控制(經過Struts框架,讀取struts-config.xml)提交到SampleAction類中。
·SampleAction記錄下值,然后轉發到index.jsp。一個成熟的Struts應用可能會處理更多的事情,不如保存或者查詢數據庫等。
· index.jsp 現在重新處理請求;如果ShowBlue或者ShowGreen的值是true,這些表格就顯示出來。
該應用并沒有任何“錯誤”。類似的Struts項目好多年都是這樣做的。但是,我們如何在不添加復雜的JavaScript或者頻繁的表單提交的前提下,為此應用增加動態的元素呢?
原文轉自:http://www.anti-gravitydesign.com