很多Web開發人員都經常抱怨說 Java™ EE 太復雜、構建新的 Web 組件太難、定制現有的組件沒有預想的那樣簡單,並且即便是很小的更改都需要重新啟動應用程序。本系列給出了針對這些問題的解決方案,即采用代碼生成器、約定、腳本語言和先進的 JavaServer Pages ™ (JSP) 特性。在本文中,您將了解如何基於 JSP 標記文件構建可重用的 Ajax 和 Java 組件,而這些 JSP 標記文件很容易開發和部署。更改之後,JSP 標記文件會由 Java EE 服務器自動重編譯,而無須重啟應用程序。此外,您還能完全控制所生成的代碼,並能輕松地定制這些輕量級組件,因為它們使用的是 JSP 語法。
本系列含 4 部分,展示了一種基於 JSP 的技術,用以生成 JavaScript 代碼、顯著減少需要手動編寫的代碼量,本文是第 1 部分。本文的示例應用程序展示了如何生成 JavaScript 函數來發送 Ajax 請求和處理 Ajax 響應。如果想要輕松地更改 Ajax 代碼,可以將這裡討論的簡單技巧應用到實際的應用程序中。本文更寬泛的目標是展示如何使用 JSP 標記文件針對具體需求生成 JavaScript 代碼,而非只是 Ajax 例程。
使用框架和代碼生成器
如果您很幸運地找到了一種能滿足您需要的組件或框架,那麼就請使用它吧。如果沒有找到也沒關系,因為您總是可以開發自己的解決方案,也可以定制現有的一段代碼。不管是哪種情況,一種很好的做法是 “參數化” 代碼並將其放入一個可重用的庫,而非將參數硬編碼到您的代碼裡。不過有時候,實現泛型並不實際,因為它會使開發變得復雜,而非簡化。在將泛型代碼放入可重用組件或框架時,可以考慮使用代碼生成器來更有效地生成特定的代碼。
在開發的過程中避免復制 & 粘貼
假設,您需要應用程序使用 Ajax 請求站點上的某些信息,最快的(當然不是最好的)方法是找到一些如清單 1 這樣的免費代碼、更改 URL 並將這些代碼粘貼到 Web 頁面。很多開發人員都會這麼做,但這種做法會導致巨大的維護問題。如果應用程序具有數百個頁面,最後的結果將是出現大量像清單 1 中的 getInfo() 這樣的函數。不好的一面是每次需要進行添加或更改(比如實現 Ajax 請求的錯誤處理)時,您都必須要手動修改所有頁面並重新測試它們。好的一面是您可以通過使用庫、框架和代碼生成器,很容易地避免這個維護問題。
清單 1. Ajax 函數
function getInfo(country, city) {
var request = null;
if (window.ActiveXObject)
request = new ActiveXObject("Microsoft.XMLHTTP");
else if (window.XMLHttpRequest)
request = new XMLHttpRequest();
else
return;
var url = "CityInfo.jsp?country=" + escape(country)
+ "&city=" + escape(city);
request.open("GET", url, true);
function processResponse() {
if (request.readyState == 4) {
if (request.status == 200) {
// ...
}
}
}
request.onreadystatechange = processResponse;
request.send(null);
}