Eclipse 更新管理程式可以使用可預測的方式來展現和瀏覽 Eclipse 更新網站。 更新網站可以含有樹狀視圖中所顯示的種類,反過來說,這些種類含有特性。 您可以在更新管理程式內的「預覽」視圖中視察特性。 如果特性是有效的安裝候選者,它將含有一個將啟動 Eclipse 安裝精靈的「立即安裝」按鈕。 一旦完成安裝作業,特性將成為產品的一部分。
這種呈現安裝特性的標準方法不是唯一的方法。 提供者可以從更新管理程式接管呈現、登錄、搜尋和其他作業, 且僅在實際將特性安裝至 Eclipse 產品時才傳回控制權。
更新管理程式能夠執行一種可以從網頁接受要求的 Servlet。 這個功能不是自動的:必須在喜好設定>安裝/更新>由 Web 觸發的更新頁面中啟動。 當按下確定時,更新管理程式將啟動可以處理送入要求的應用程式伺服器。 接著,將以回呼 URL 資訊,對所有從「更新管理程式」內開啟的 URL 進行編碼。 如果起始的 URL 是一般網頁,則完成編碼的 URL 將具有查詢組件, 來新增回復 URL 以用來呼叫 Eclipse:
http://acme.com/myApplication.html
變成
http://acme.com/myApplication.html?updateURL=<localhost>:<localport>?org.eclipse.update/install
其中 'localhost' 是在您本端機器上執行之 Eclipse 伺服器的位址, 當啟動伺服器時,就會動態選取本端埠,而 query 就是 Eclipse Web 應用程式名稱和處理要求之 Servlet 的名稱。
如果程式 URL 已是查詢:
http://acme.com/myApplication/myServlet?arg1=value1&arg2=value2
編碼僅會新增我們的資訊,作為另一個參數:
http://acme.com/myApplication/myServlet?arg1=value1&arg2=value2&updateURL=<localhost>:<localport>?org.eclipse.update/install
正常網頁和查詢會忽略編碼,而且既不會導致任何問題, 也不會影響呈現方式。它僅新增資訊,以供知道它的頁面使用。
因為網頁必須從更新管理程式啟動,所以「更新」視圖中的網站書籤可以建立成 Web 書籤。 更新管理程式會相應地處理這些書籤,而且當按兩下它時, 它將在瀏覽器中開啟 URL(如果可在作業和視窗系統版本上使用內嵌的瀏覽器, 它將直接在更新管理程式內開啟;否則,它將在常駐的瀏覽器視窗中開啟)。
提供者可以用他們想要的任何方法來設定他們的「更新」網頁: 他們可以使用資料庫所支持的複雜 Web 應用程式,或僅使用簡單的靜態 HTML。 使用更複雜的架構可讓提供者提供更多的值給使用者。 新特性、更新和臨時修正程式的複雜搜尋作業、所選特性的豐富視覺呈現方式、 有關其功能的文章、各種有用的鏈結、「最著名特性」投票僅是某些可能發生的事而已。 此外,提供者可以啟用鑑別,以限制使用者存取某些特性、需要使用者登錄等。
有許多不同方法可用來擷取編碼資訊。 使用如下所示的 Java Script 函數是相當簡單的方法:
<SCRIPT LANGUAGE="JavaScript"> function getArgs() { var args = new Object(); var query = location.search.substring(1); var pairs = query.split("&"); for (var i=0; i<pairs.length; i++) { var pos = pairs[i].indexOf('='); if (pos == -1) continue; var argname = pairs[i].substring(0, pos); var value = pairs[i].substring(pos+1); args[argname] = unescape(value); } return args; } </SCRIPT>
上述函數會剖析現行網頁的 URL,然後傳回查詢引數作為陣列。
回復 URL 的角色就是容許網頁將控制權傳回給 Eclipse。 一旦使用者選取了要安裝的特性,它必須傳回至 Eclipse,才能完成它。 由 Web 觸發之更新的角色不是使更新網站作廢: 仍然需要它們,但在這個實務中,它們僅作為實際儲存特性的位置。 網頁必須位在回復至 Eclipse 的某一點上,並傳遞更新網站 URL, 以及傳遞所選特性 ID 和版本。將這項資訊進行編碼的做法是使用程式回復 URL 並新增引數, 因而構成一個查詢。
回復查詢的引數如下:
當使用者在網頁中完成了他們的所有選擇時, 應該進行 Eclipse 的回復,而且所留下的僅是按下某種「下載」按鈕或超鏈結。 這個功能的簡單實作如下:
<input type="button" name="Download" value="Download" onClick="javascript:download('com.example.root', '1.0.0')">
在上述程式碼中,特性 Id 和版本已寫死在按鈕標示中。
下載函數的實作可以如下:
function download(id, version) { var args = getArgs(); if (args.updateURL) { var updateURL = args.updateURL; var callback = updateURL+"?server= "+escape("http://acme.com/updateSite/")+ "&feature="+escape(id+'_'+version)+"&backURL="+escape(location); location = callback; } }
在上述的 JavaScript 函數中,已在網頁 URL 從頭進行編碼的回復 URL 是用來產生查詢。 一旦建立了查詢,將要求瀏覽器開啟它。這個步驟將使瀏覽器呼叫 Eclipse servlet, 來處理查詢、連接至提供者更新網站(在這種情況下,指的是 "http://acme.com/updateSite/"), 以及尋找具有所提供的 ID 和版本的特性。如果一切順利,Eclipse 視窗將被帶至頂端,而且畫面上將開啟熟悉的安裝精靈。這時, 您將回到 Eclipse,然後可以如同往常一般來完成安裝。
您必須指出已對回復 URL 進行編碼,因為這對於整個機制很重要。 如果含有「下載」鏈結或按鈕的頁面在網站對照表中具有數層之深, 則根網頁(從更新管理程式啟動的網頁)必須確定回復 URL 已下傳至所有從該網頁內開啟的網頁。 這有多種不同的做法:直接在網頁中編碼、儲存暫時性 Cookie、將它儲存在從網站提供網頁的 Servlet 等。)。