現在讓我們想想如何建立一個應用,令其在真實的Web環境中運行,它將把Java的優勢表現得淋漓盡致。這個應用的一部分是在Web伺服器上啟動並執行一個Java程式,另一部分則是一個“程式片”或“小應用程式”(Applet),從伺服器下載至瀏覽器(即“客戶”)。這個程式片從使用者那裡收集資訊,並將其傳回Web伺服器上啟動並執行應用程式。程式的任務非常簡單:程式片會詢問使用者的E-mail地址,並在驗證這個地址合格後(沒有包含空格,而且有一個@符號),將該E-mail發送給Web伺服器。伺服器上啟動並執行程式則會捕獲傳回的資料,檢查一個包含了所有E-mail地址的資料檔案。如果那個地址已包含在檔案裡,則向瀏覽器反饋一條訊息,說明這一情況。該訊息由程式片負責顯示。若是一個新地址,則將其置入列表,並通知程式片已成功添加了電子函件地址。
若採用傳統方式來解決這個問題,我們要建立一個包含了文字欄位及一個“提交”(Submit)按鈕的HTML頁。使用者可在文字欄位裡鍵入自己喜歡的任何內容,並毫無阻礙地提交給伺服器(在用戶端不進行任何檢查)。提交資料的同時,Web頁也會告訴伺服器應對資料採取什麼樣的操作——知會“通用閘道介面”(CGI)程式,收到這些資料後立即運行伺服器。這種CGI程式通常是用Perl或C寫的(有時也用C++,但要求伺服器支援),而且必須能控制一切可能出現的情況。它首先會檢查資料,判斷是否採用了正確的格式。若答案是否定的,則CGI程式必須建立一個HTML頁,對遇到的問題進行描述。這個頁會轉交給伺服器,再由伺服器反饋回使用者。使用者看到出錯提示後,必須再試一遍提交,直到通過為止。若資料正確,CGI程式會開啟資料檔案,要麼把電子函件地址加入檔案,要麼指出該地址已在資料檔案裡了。無論哪種情況,都必須格式化一個恰當的HTML頁,以便伺服器返回給使用者。
作為Java程式員,上述解決問題的方法顯得非常笨拙。而且很自然地,我們希望一切工作都用Java完成。首先,我們會用一個Java程式片負責用戶端的資料有效性校正,避免資料在伺服器和客戶之間傳來傳去,浪費時間和頻寬,同時減輕伺服器額外構建HTML頁的負擔。然後跳過Perl CGI指令碼,換成在伺服器上運行一個Java應用。事實上,我們在這兒已完全跳過了Web伺服器,僅僅需要從程式片到伺服器上啟動並執行Java應用之間建立一個串連即可。
正如大家不久就會體驗到的那樣,儘管看起來非常簡單,但實際上有一些意想不到的問題使局面顯得稍微有些複雜。用Java 1.1寫程式片是最理想的,但實際上卻經常行不通。到本書寫作的時候,擁有Java 1.1能力的瀏覽器仍為數不多,而且即使這類瀏覽器現在非常流行,仍需考慮照顧一下那些升級緩慢的人。所以從安全的角度看,程式片代碼最好只用Java 1.0編寫。基於這一前提,我們不能用JAR檔案來合并(壓縮)程式片中的.class檔案。所以,我們應儘可能減少.class檔案的使用數量,以縮短下載時間。
好了,再來說說我用的Web伺服器(寫這個示範程式時用的就是它)。它確實支援Java,但僅限於Java 1.0!所以伺服器應用也必須用Java 1.0編寫。