領先一步
VMware 提供培訓和認證,助您加速進步。
瞭解更多這篇部落格假設您已安裝 SpringSource Tool Suite 1.1.1(我使用的是 Eclipse 3.4 版本)、 dm Server 1.0.0 和 GWT 1.5。它還假設您對 Java 程式設計有很好的理解,並且對 Javascript 和 Ajax 有基本的瞭解。
為了演示中使用的路徑,我在/Users/bcorrie/gwt/workspace建立了一個新的 Eclipse 工作區。我已在下方包含了可以下載的壓縮專案,其中包含一個我定義的GWT_ROOT_INSTALL變數。要使用我的專案,當您匯入它們時,請導航到“Preferences”->“Java”->“Build Path”->“Classpath Variables”並定義您自己的GWT_ROOT_INSTALL.
這些工具的一個限制是它們規定了原始碼的存放位置。您的原始碼必須位於專案子目錄/src中,您的客戶端程式碼必須位於以client結尾的包中,您的伺服器程式碼必須位於以server結尾的包中。projectCreator還是applicationCreator無法配置為其他方式,因為這通常是GWTShell還是GWTCompiler期望您的程式碼所在的位置。稍後,我們將探討一些重新組織原始碼和調整執行配置以使其更靈活的方法。
在命令列上建立專案後,將其匯入到 STS 中。
使用“匯入”->“常規”->“將現有專案匯入工作區”。
如果您不想經歷開發示例程式碼的過程,您可以在此處下載我的初始專案的壓縮副本。要執行我的專案,您需要完成以下步驟
- 解壓縮並匯入專案(“匯入”->“將現有專案匯入工作區”)- 定義一個GWT_ROOT_INSTALL變數,如上面的背景中所述 - 修改StockWatcher GWTShell.launch中包含的執行配置,或使用以下值建立一個新的執行配置
- 右鍵單擊 StockWatcher 專案 ->“執行方式”->“執行配置” - 對於“主類”,輸入com.google.gwt.dev.GWTShell- 在“程式引數”中,輸入-out www com.google.gwt.sample.stockwatcher.StockWatcher/StockWatcher.html- 僅在 Mac OS X 上,在“VM 引數”中,輸入-XstartOnFirstThread- 在“類路徑”->“使用者條目”中
- 新增gwt-dev-<os>.jar(例如gwt-dev-mac.jar)- 新增 StockWatcher 專案/src資料夾,使用“高階”->“新增資料夾”
請注意,將/src資料夾新增到類路徑是 GWTShell 的要求,因為它需要類路徑上包含元資料,例如其 .xml 檔案。
在選中 StockWatcher 專案的情況下單擊“執行”按鈕,或選擇您在第 2 步中建立的執行配置。
另請注意,當您在託管模式下執行時,GWTShell會在您的專案中建立/www輸出資料夾以及/tomcat資料夾以配置嵌入式 Tomcat。測試後重新整理 StockWatcher 專案即可看到這些資料夾。
那麼,為什麼不將所有內容複製到 WAR 專案並從那裡執行呢?嗯,我認為保持兩個獨立專案有以下幾個原因
首先,您不希望託管模式將其/www還是/tomcat資料夾生成到您的 WAR 專案中。
其次,將 javascript 和 html 從託管模式專案生成到 WAR 專案中具有保持兩個專案更乾淨並分離關注點的優勢。它消除了生成程式碼的重複,這可能導致版本控制混亂,特別是考慮到生成程式碼是混淆的。
第三,如第 1 步所述,GWTShell還是GWTCompiler要求您的原始碼位於名為/src的子目錄中。這限制了您的 WAR 專案與 Maven 和 Ant 等工具整合的便利性。
最後,它還允許 Java 程式碼分離,這樣您就不會將冗餘的客戶端程式碼複製到 WAR 檔案中。
雖然這可能看起來是不必要的額外工作,但隨著我們採用不同的方法,您會看到早期拆分程式碼可以使其更容易地部署為共享服務。
所以,讓我們建立一個新的動態 Web 專案,同時建立一個 dm Server 的伺服器例項。
如果您工作區中還沒有 dm Server 例項,則需要點選“目標執行時”文字欄位旁邊的“新建”按鈕並選擇“建立新的本地伺服器”。請注意,我還選擇了src/main/java還是src/main/webapp分別作為“Java 源目錄”和“內容目錄”。您可以使用預設值,但建議使用這些路徑,因為它們與 Maven 等構建工具整合得很好。
接下來,我們將把 Java 程式碼拆分到兩個專案中
請注意,如果您只是將 GWT 程式碼匯出為普通的 WAR 檔案,則此程式碼劃分不是必需的。實現這一點的最簡單方法是將您的 Java 專案建立為 WAR 專案的 Java EE 依賴項,Eclipse 會將您的 Java 專案轉換為 JAR 檔案並將其新增到 WAR 中的 WEB-INF/lib 中。然而,這種方法的缺點是您將冗餘的客戶端程式碼打包到 WAR 中,並且會使以後將應用程式拆分為服務變得更加困難。
因此,我們的專案中有 3 種類型的 Java 程式碼:僅編譯為 javascript 和 html 的程式碼、僅用於伺服器端的程式碼以及同時支援兩種目的的程式碼。將最後兩種型別的程式碼移到我們的 WAR 專案中是有意義的。將我們的“通用”類(客戶端和伺服器使用的類)放在單獨的包中也是有意義的(同樣,對此的需求將在部落格 3 中變得更清晰),我們將其命名為com...client.api。最後,GWT 要求我們的 Async 介面與 RemoteService 介面在同一個包中,因此將其重構到com...client.api包中。完成後,它應該看起來像這樣
程式碼拆分所需的最後一件事是將 StockWatcherWar 專案新增到 StockWatcher 專案的構建路徑中,以便它可以訪問com...client.api包中的類(屬性 -> Java 構建路徑 -> 專案 -> 新增...)。
如果您願意,可以跳過所有這些繁瑣的工作,透過此處下載我的兩個完成專案以及各種執行配置的壓縮包(有關匯入和設定的說明,請參閱第 2 步和背景)。如果您有一個乾淨的工作區,您需要建立 dm Server 執行時的一個例項(新建 -> 伺服器 -> SpringSource...),並且您可能需要在“屬性”->“目標執行時”中為 WAR 專案選擇伺服器執行時,因為它可能與我的不匹配。
- 右鍵單擊 StockWatcher 專案 ->“執行方式”->“執行配置”並建立一個新配置 - 對於“主類”,輸入com.google.gwt.dev.GWTCompiler- 在“程式引數”中,輸入-out <您的工作區路徑>/StockWatcherWar/src/main/webapp com.google.gwt.sample.stockwatcher.StockWatcher- 僅在 Mac OS X 上,在“VM 引數”中,輸入-XstartOnFirstThread- 在“類路徑”->“使用者條目”中
- 新增gwt-dev-<os>.jar(例如gwt-dev-mac.jar)- 新增 StockWatcher 專案/src資料夾和 StockWatcherWar/src/main/java資料夾,使用“高階”->“新增資料夾”
請注意,將原始檔夾新增到類路徑是 Google 編譯器的要求。
現在,執行您剛剛建立的編譯器配置,然後重新整理 StockWatcherWar 專案以檢視生成的檔案。您應該會看到類似這樣的內容
接下來,我們需要將所需的依賴項新增到我們的專案中。
- 新增 Web 模組依賴項gwt-servlet.jar(“屬性”->“Java EE 模組依賴項”->“新增外部 Jar”)。請注意,此模組依賴於javax.servletAPI。 - 根據 Google 的說明修改web.xml檔案。同時新增StockWatcher.html到<welcome-file-list>中,以便在部署時自動顯示(儘管在 Eclipse 中部署時這並不總是有效,因為瀏覽器視窗通常在伺服器完全初始化之前開啟)。
如果您遇到問題,請檢視我從第 4 步下載的壓縮專案。
一旦 WAR 專案成功執行,您可以將託管模式配置為使用 dm Server 作為其伺服器,而不是其嵌入式 Tomcat。為此,您只需修改GWTShell的執行配置,並將程式引數更改為-noserver -out www https://:8080/StockWatcherWar/。這允許您快速測試客戶端更改。伺服器端更改會自動重新部署到正在執行的伺服器。很好!
需要指出的是,如果您想在嵌入式 Tomcat 託管模式下執行我所倡導的設定,您需要暫時取消選擇 dm Server 作為 WAR 專案屬性中的目標執行時。這是因為將 StockWatcherWar 新增到 StockWatcher 的構建路徑中也會引入 dm Server 執行時包(例如javax.servlet),這會搞亂GWTShell.
的構建路徑。假設這一切都奏效了,現在讓我們將 WAR 打包並部署到工具之外。
匯出 WAR 後,我們需要在 STS 之外啟動 dm Server。
首先,確保 STS dm Server 已停止,否則它們會在埠上衝突。然後,在命令列上,執行 dm Server 啟動指令碼。在我的情況下,這是bin/startup.sh。您可以新增-clean選項以確保您從乾淨的設定開始。您應該會看到訊息
[2008-10-27 14:14:44.468] server-dm-10 <SPPM0002I> Server open for business with profile 'web'.
成功啟動後,在 Web 瀏覽器中開啟管理控制檯,使用以下 URL
https://:8080/admin/web/applications/list.htm
預設使用者名稱是管理員,密碼是springsource。有關執行和配置 dm Server 的更詳細資訊,請參閱使用者指南。
您現在應該會看到以下內容
在“應用程式位置”文字欄位中瀏覽您匯出的 WAR 檔案,然後單擊上傳。這將上傳並部署 WAR 檔案,該檔案隨後應顯示在“已部署應用程式”中
在終端輸出中,您應該會看到以下訊息
[2008-10-27 14:07:44.380] server-tomcat-thread-5 <SPSC1000I> Creating web application '/StockWatcherWar'. [2008-10-27 14:07:44.396] async-delivery-thread-1 <SPSC1001I> Starting web application '/StockWatcherWar'. [2008-10-27 14:07:44.684] server-tomcat-thread-5 <SPDE0010I> Deployment of 'StockWatcherWar.war' version '0' completed.
最後,所有剩下的工作就是單擊上面顯示的/StockWatcherWar連結,您現在正在使用您的 GWT 應用程式!