搶先一步
VMware 提供培訓和認證,助您快速提升。
瞭解更多本部落格假設您已安裝 SpringSource Tool Suite 1.1.1(我使用的是 Eclipse 3.4 版本)、 dm Server 1.0.0 和 GWT 1.5。它還假設您對 Java 程式設計有很好的理解,並對 Javascript 和 Ajax 有基本瞭解。
為了演示中使用的路徑,我在以下位置建立了一個新的 Eclipse 工作區/Users/bcorrie/gwt/workspace。我包含了可以下載的壓縮專案,其中包含一個GWT_ROOT_INSTALL我已定義的變數。要使用我的專案,匯入後請導航至“Preferences”->“Java”->“Build Path”->“Classpath Variables”,然後定義您自己的GWT_ROOT_INSTALL.
這些工具的一個限制是它們對原始碼的位置有規定。您的原始碼必須位於專案子目錄中,該目錄名為/src,您的客戶端程式碼必須位於以client結尾的包中,您的伺服器程式碼必須位於以server結尾的包中。它們projectCreator和applicationCreator無法配置為執行其他操作,因為這通常是GWTShell和GWTCompiler和 期望您的程式碼所在的位置。稍後,我們將研究一些重新組織原始碼和調整執行配置以使其更靈活的方法。
在命令列建立專案後,將其匯入 STS。
使用“Import”->“General”->“Existing Projects into Workspace”。
如果您不想親自開發示例程式碼,您可以在此處下載我初始專案的壓縮副本。要使用我的專案執行,您需要執行以下步驟
- 解壓並匯入專案(“Import”->“Existing Projects Into Workspace”) - 定義一個GWT_ROOT_INSTALL變數,如上面背景部分所述 - 修改已包含的StockWatcher GWTShell.launch執行配置,或建立具有以下值的新配置
- 右鍵單擊 StockWatcher 專案 ->“Run As”->“Run Configurations” - 對於“Main class”,輸入com.google.gwt.dev.GWTShell- 在“Program arguments”中,輸入-out www com.google.gwt.sample.stockwatcher.StockWatcher/StockWatcher.html- 僅在 Mac OS X 上,在“VM arguments”中,輸入-XstartOnFirstThread- 在“Classpath”->“User Entries”中
- 新增gwt-dev-<os>.jar(例如:gwt-dev-mac.jar) - 新增 StockWatcher 專案/src資料夾,使用“Advanced”->“Add Folders”
請注意,將/src資料夾新增到 classpath 是 GWTShell 的要求,因為它需要將元資料(例如 .xml 檔案)新增到 Java classpath 中。
選擇 StockWatcher 專案後,單擊“Run”按鈕,或選擇您在步驟 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 例項,您需要點選“Target Runtime”文字欄位旁邊的“New”按鈕,然後選擇“Create a new local server”。請注意,我還選擇了src/main/java和src/main/webapp作為“Java Source Directory”和“Content Directory”。您可以使用預設值,但推薦這些路徑,因為它們與 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包中的類(Properties -> Java Build Path -> Projects -> Add...)。
如果您願意,可以透過此處下載我的兩個完成的專案以及各種執行配置的 zip 檔案來跳過所有這些繁重的工作(有關匯入和設定的說明,請參閱步驟 2 和背景)。如果您有一個乾淨的工作區,您需要建立一個 dm Server 執行時例項(New -> Server -> SpringSource ...),並且您可能需要在 WAR 專案的“Properties”->“Targeted Runtimes”中選擇伺服器執行時,因為它可能與我的不匹配。
- 右鍵單擊 StockWatcher 專案 ->“Run As”->“Run Configurations”,然後建立一個新的配置 - 對於“Main class”,輸入com.google.gwt.dev.GWTCompiler- 在“Program arguments”中,輸入-out <path to your workspace>/StockWatcherWar/src/main/webapp com.google.gwt.sample.stockwatcher.StockWatcher- 僅在 Mac OS X 上,在“VM arguments”中,輸入-XstartOnFirstThread- 在“Classpath”->“User Entries”中
- 新增gwt-dev-<os>.jar(例如:gwt-dev-mac.jar) - 新增 StockWatcher 專案/src資料夾,以及 StockWatcherWar 的/src/main/java資料夾,使用“Advanced”->“Add Folders”
請注意,將原始檔夾新增到 classpath 是 Google 編譯器的要求。
現在,執行您剛建立的編譯器配置,然後重新整理 StockWatcherWar 專案以檢視生成的檔案。您應該會看到類似這樣的內容
接下來,我們需要在專案中新增所需的依賴項。
- 新增 Web 模組依賴項gwt-servlet.jar(“Properties”->“Java EE Module Dependencies”->“Add External Jar”)。請注意,此模組依賴於javax.servletAPI。 - 修改web.xml檔案,按照 Google 的說明進行。同樣值得新增StockWatcher.html到一個<welcome-file-list>中,以便部署後自動開啟(儘管在 Eclipse 中部署時並非總是有效,因為瀏覽器視窗通常在伺服器完全初始化之前開啟)。
如果您遇到問題,可以檢視步驟 4 中我提供的壓縮專案。
成功執行 WAR 專案後,您可以將託管模式配置為使用 dm Server 作為其伺服器,而不是使用其嵌入式 Tomcat。為此,您只需修改GWTShell的執行配置,並將程式引數更改為-noserver -out www https://:8080/StockWatcherWar/。這允許您快速測試客戶端更改。伺服器端更改會自動重新部署到正在執行的伺服器。真棒!
需要指出的是,如果您想在我推薦的設定下在嵌入式 Tomcat 託管模式中執行,您需要暫時取消選擇 WAR 專案屬性中的 dm Server 作為目標執行時。這是因為將 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
預設使用者名稱是admin,密碼是springsource。有關執行和配置 dm Server 的更詳細資訊,請參閱使用者指南。
您現在應該看到以下內容
在“Application Location”文字欄位中瀏覽您匯出的 WAR 檔案,然後單擊 upload。這將上傳並部署 WAR 檔案,該檔案隨後應出現在“Deployed Applications”中
在終端輸出中,您應該看到以下訊息
[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 應用程式了!