一、什么是動態內容
大多數熱門Web網站都從在線廣告業務獲利。Web頁面中的廣告空間是有限的,為了讓廣告投資物有所值,廣告客戶不僅必須在很小的廣告空間內塞入大量的信息,而且還要保證廣告能夠吸引用戶的注意力。在當前的大多數網站上,放入Web頁面的橫幅廣告一般由服務器在構造頁面的同時生成,我們無法把新的廣告動態地插入到已經發送出去的頁面。 如果要顯示新的廣告,唯一的辦法就是重新刷新頁面。我們可以用編程的方法刷新頁面,例如:
使用瀏覽器窗口對象的setTimeOut函數定期地刷新頁面。但是,用這種方法刷新廣告時,用戶會很明顯地感到頁面刷新過程;同時,要確定一個合適的刷新頻率也很困難。
把頁面的過期時間設置為數秒時間,使得無論何時輸入焦點轉到該頁面(即瀏覽器被激活)時,瀏覽器就會重新下載該頁面。
一些大型網站,如yahoo.com和msn.com,都已經采用了這些技術。這兩種方法都有各自的優點和缺點。在只使用java的情況下,我們完全可以通過網絡編程和一些界面編程工作實現橫幅廣告的刷新系統,但必須解決下載時間過長和刷新延遲的問題。
二、用Java實現內容推送
結合JavaScript幀間通信和一個管理網絡通信的Java Applet,我們能夠用推送技術解決這個問題。在這樣一個系統中,Java Applet的任務是連接服務器并監聽內容更新。一旦接收到了新的內容,Applet就構造出顯示這些新內容的HTML代碼,調用一個Javascript函數并把包含新內容的HTML傳遞給JavaScript函數。JavaScript函數運用DHTML和DOM技術,把頁面中一個
Web服務器只在80端口監聽連接請求。因此,除了Web服務器之外,我們還需要一個接受Applet的Socket連接請求的網絡應用服務。這個網絡應用服務定時地查詢數據庫,把改動數據發布(推送)到所有已經連接的Applet。由于運用了隱藏幀和JavaScript的幀間通信功能,我們能夠從用戶面前隱藏大多數JavaScript邏輯。
在這整個處理過程中,最困難的任務是Java Applet與JavaScript代碼之間的通信。Netscape提供了一個稱為netscape.javascript.JSObject的類。要使用這個對象,請加入一個包含特殊“MAYSCRIPT”屬性的Applet標記:
JSObject的方法允許Applet與文檔對象交互以及調用JavaScript命令。例如,把下面的代碼放入Applet,我們就能夠訪問窗口對象:
獲得JSObject引用后,我們就能夠訪問文檔窗口對象,并通過JSObject的eval()方法調用JavaScript函數。
三、用DHTML更新頁面
在把來自Applet的新內容寫入文檔時,為了不影響原來已經存在的內容,我們可以使用HTML的
對于IE以及Netscape 6,這個HTML標記是:
// 所有要更新的內容必須用id標識
對于Netscape 4.x版本,這個HTML標記是:
雖然我們可以通過引用適當的ID,從Applet直接更新HTML內容,但為了清楚起見,我們將把更新HTML代碼的程序邏輯放入JavaScript函數。下面的JavaScript代碼把瀏覽器的類型保存到ie變量:
Applet從新數據構造出HTML代碼,把它保存到JavaScript變量content,然后調用assignData()方法。內容數據可以是從純HTML到xml到二進制數據的任何東西。
// 根據瀏覽器類型調用合適的方法 function assignData() { if(ie) {explore();} else {navig(); } }
如果瀏覽器是IE或者Netscape 6,Applet調用explore()方法:
//content是一個javascript變量,它以HTML格式描述了需要 //顯示的新數據 function explore() { iexplorer.innerHTML=content; }
如果瀏覽器是Netscape 4.0或者更高版本,Applet調用navig()方法:
四、通信過程
在服務器端,一個ImageAppliation.java類的實例響應Socket連接請求,并為每一個新的連接請求創建一個新的線程。為了簡化代碼,每一個線程只檢查數據文件是否改變。如果數據文件已經改變,則線程讀取文件內容,并把新的數據發送給已經連接的Applet(示例應用把整個文件發送給Applet)。
在客戶端,一個隱藏幀包含了ImageApplet.java這個Applet,因此用瀏覽器的查看HTML源代碼功能是無法看到Applet標記的。Applet實現了連接服務器(下載該Applet的源服務器)的功能,并實現了一個簡單的通信協議。建立與服務器的連接之后,Applet接收來自服務器的數據,構造出HTML代碼,并調用JavaScript函數把數據傳入文檔:
netscape.javascript.JSObject完成Applet到JavaScript的通信,不同版本的客戶端瀏覽器需要不同的版本。你可以下載得到為Netscape提供的壓縮類文件java40.jar。IE已經帶有JSObject類,但有點難找。你可以搜索$windows$\Java\Packages目錄尋找包含JSObject類的ZIP文件。
服務器把ImageArrayElement.java類的實例通過toString()方法串行化成為字符串發送給Applet。服務器從數據文件構造出各個對象,調用toString()方法,連接得到代表所有對象的字符串,最后發送結果字符串。而在另一端,Applet接收并解析這個字符串,重新構造出各個ImageArrayElement對象。這里之所以用一個長字符串的形式發送數據,是因為這種方法只需要很簡單的處理過程,使得用戶能夠以接近實時的速度立即得知數據的變化;但是,我們也可以用另外一種方法,即以向量的形式發送對象。
在一個正式運行的應用中,你一般應該讓新數據插入當前頁面的過程透明。但在示例應用中,為了讓程序運行過程更加直觀,它將在新內容到達的時候提示用戶。
推送技術最主要的優點就是應用服務器只把那些改變的數據發送到網絡,從而使得延遲減到了最少。由于這個Applet負責完成的工作非常少(不涉及用戶界面,這部分工作由瀏覽器負責),所以Applet體積很小,裝載速度非??臁?nbsp;
五、如何運行本文實例
要測試本文示例應用,你的機器上必須安裝有Web服務器和JDK 1.7或更高版本。
安裝要點:
解開ZIP壓縮文件并安裝到Web服務器默認根目錄。
對于IIS服務器,默認根目錄是Inetput\wwwroot
對于jsdk2.1所帶的免費服務器,默認目錄是<安裝目錄>\webpages
解開壓縮文件之后,所有文件都將安裝到
把下面幾行代碼加入默認頁面。每一種服務器都有自己的默認頁面,IIS的默認頁面是“default.htm”,請參見Web服務器文檔了解具體說明:
運行應用的步驟:
打開一個DOS窗口,進入<默認Web目錄>/exp,執行“java Imageapplication”。系統將顯示“Server started listening at port 6011”。注意確保classpath環境變量指向了當前工作目錄。
啟動Web服務器。
打開瀏覽器輸入下面的URL:http://localhost:8080。該URL將打開Web服務器的默認頁面,它應該有一個“Java based dynamic Ad-Banner”鏈接。點擊這個鏈接就啟動了本文的示例應用。
用Notepad打開“/exp/images.txt”文件,復制并粘貼一行內容,保存文件。你可以立即看到系統顯示一個JavaScript窗口提示內容更新。關閉JavaScript窗口,頁面將顯示新的內容。
Copyright@ 2011-2016 版權所有:大連千億科技有限公司 遼ICP備11013762-3號 google網站地圖 百度網站地圖 網站地圖
公司地址:大連市沙河口區中山路692號辰熙星海國際2317 客服電話:0411-39943997 QQ:2088827823 37482752
法律聲明:未經許可,任何模仿本站模板、轉載本站內容等行為者,本站保留追究其法律責任的權利! 隱私權政策聲明