| 網(wǎng)站建設(shè)是指使用標(biāo)識(shí)語(yǔ)言(markup language),通過一系列設(shè)計(jì)、建模、和執(zhí)行的過程將電子格式的信息通過互聯(lián)網(wǎng)傳輸,最終以圖形用戶界面(GUI)的形式被用戶所瀏覽。簡(jiǎn)單來說,網(wǎng)頁(yè)設(shè)計(jì)的目的就是產(chǎn)生網(wǎng)站。簡(jiǎn)單的信息如文字,圖片(GIF,JPEG,PNG)和表格,都可以通過使超文件標(biāo)示語(yǔ)言、可擴(kuò)展超文本標(biāo)記語(yǔ)言等標(biāo)示語(yǔ)言放置到網(wǎng)站頁(yè)面上。 一、什么是動(dòng)態(tài)內(nèi)容 使用瀏覽器窗口對(duì)象的setTimeOut函數(shù)定期地刷新頁(yè)面。但是,用這種方法刷新廣告時(shí),用戶會(huì)很明顯地感到頁(yè)面刷新過程;同時(shí),要確定一個(gè)合適的刷新頻率也很困難。 二、用Java實(shí)現(xiàn)內(nèi)容推送 Web服務(wù)器只在80端口監(jiān)聽連接請(qǐng)求。因此,除了Web服務(wù)器之外,我們還需要一個(gè)接受Applet的Socket連接請(qǐng)求的網(wǎng)絡(luò)應(yīng)用服務(wù)。這個(gè)網(wǎng)絡(luò)應(yīng)用服務(wù)定時(shí)地查詢數(shù)據(jù)庫(kù),把改動(dòng)數(shù)據(jù)發(fā)布(推送)到所有已經(jīng)連接的Applet。由于運(yùn)用了隱藏幀和JavaScript的幀間通信功能,我們能夠從用戶面前隱藏大多數(shù)JavaScript邏輯。 在這整個(gè)處理過程中,最困難的任務(wù)是Java Applet與JavaScript代碼之間的通信。Netscape提供了一個(gè)稱為netscape.javascript.JSObject的類。要使用這個(gè)對(duì)象,請(qǐng)加入一個(gè)包含特殊“MAYSCRIPT”屬性的Applet標(biāo)記: <APPLET code="MyApplet.class" height=1 width=1 MAYSCRIPT> JSObject的方法允許Applet與文檔對(duì)象交互以及調(diào)用JavaScript命令。例如,把下面的代碼放入Applet,我們就能夠訪問窗口對(duì)象: import netscape.javascript.*; public class MyApplet extends java.applet.Applet{ private JSObject mainwin; public void init(){ mainwin = JSObject.getWindow(this); } } 獲得JSObject引用后,我們就能夠訪問文檔窗口對(duì)象,并通過JSObject的eval()方法調(diào)用JavaScript函數(shù)。 三、用DHTML更新頁(yè)面 對(duì)于IE以及Netscape 6,這個(gè)HTML標(biāo)記是: // 所有要更新的內(nèi)容必須用id標(biāo)識(shí) <div id="iexplorer" width=700px ></div>
<DATA><layer id="netscapev" ></layer></DATA> 雖然我們可以通過引用適當(dāng)?shù)腎D,從Applet直接更新HTML內(nèi)容,但為了清楚起見,我們將把更新HTML代碼的程序邏輯放入JavaScript函數(shù)。下面的JavaScript代碼把瀏覽器的類型保存到ie變量: applnname=navigator.appName; if(applnname=="Microsoft Internet Explorer") { ie=true; } else { ie=false; } Applet從新數(shù)據(jù)構(gòu)造出HTML代碼,把它保存到JavaScript變量content,然后調(diào)用assignData()方法。內(nèi)容數(shù)據(jù)可以是從純HTML到XML到二進(jìn)制數(shù)據(jù)的任何東西。 // 根據(jù)瀏覽器類型調(diào)用合適的方法 function assignData() { if(ie) {explore();} else {navig(); } }
//content是一個(gè)javascript變量,它以HTML格式描述了需要 //顯示的新數(shù)據(jù) function explore() { iexplorer.innerHTML=content; } 如果瀏覽器是Netscape 4.0或者更高版本,Applet調(diào)用navig()方法: function navig() { document.netscapev.document.write(“<DATA>“ + content + “</DATA>“); document.netscapev.document.close(); } 四、通信過程 在客戶端,一個(gè)隱藏幀包含了ImageApplet.java這個(gè)Applet,因此用瀏覽器的查看HTML源代碼功能是無(wú)法看到Applet標(biāo)記的。Applet實(shí)現(xiàn)了連接服務(wù)器(下載該Applet的源服務(wù)器)的功能,并實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的通信協(xié)議。建立與服務(wù)器的連接之后,Applet接收來自服務(wù)器的數(shù)據(jù),構(gòu)造出HTML代碼,并調(diào)用JavaScript函數(shù)把數(shù)據(jù)傳入文檔: public void upDateHTML(String str){ //data是表單的名字, //quote是一個(gè)JavaScript變量 //str是新構(gòu)造出來的HTML代碼 mainwin.eval("document.data.quote.value=“" + str + "“"); mainwin.eval("javascript:assignData()"); return; } netscape.javascript.JSObject完成Applet到JavaScript的通信,不同版本的客戶端瀏覽器需要不同的版本。你可以下載得到為Netscape提供的壓縮類文件java40.jar。IE已經(jīng)帶有JSObject類,但有點(diǎn)難找。你可以搜索$windows$\Java\Packages目錄尋找包含JSObject類的ZIP文件。 服務(wù)器把ImageArrayElement.java類的實(shí)例通過toString()方法串行化成為字符串發(fā)送給Applet。服務(wù)器從數(shù)據(jù)文件構(gòu)造出各個(gè)對(duì)象,調(diào)用toString()方法,連接得到代表所有對(duì)象的字符串,最后發(fā)送結(jié)果字符串。而在另一端,Applet接收并解析這個(gè)字符串,重新構(gòu)造出各個(gè)ImageArrayElement對(duì)象。這里之所以用一個(gè)長(zhǎng)字符串的形式發(fā)送數(shù)據(jù),是因?yàn)檫@種方法只需要很簡(jiǎn)單的處理過程,使得用戶能夠以接近實(shí)時(shí)的速度立即得知數(shù)據(jù)的變化;但是,我們也可以用另外一種方法,即以向量的形式發(fā)送對(duì)象。 在一個(gè)正式運(yùn)行的應(yīng)用中,你一般應(yīng)該讓新數(shù)據(jù)插入當(dāng)前頁(yè)面的過程透明。但在示例應(yīng)用中,為了讓程序運(yùn)行過程更加直觀,它將在新內(nèi)容到達(dá)的時(shí)候提示用戶。 推送技術(shù)最主要的優(yōu)點(diǎn)就是應(yīng)用服務(wù)器只把那些改變的數(shù)據(jù)發(fā)送到網(wǎng)絡(luò),從而使得延遲減到了最少。由于這個(gè)Applet負(fù)責(zé)完成的工作非常少(不涉及用戶界面,這部分工作由瀏覽器負(fù)責(zé)),所以Applet體積很小,裝載速度非?。 五、如何運(yùn)行本文實(shí)例 安裝要點(diǎn): 解開ZIP壓縮文件并安裝到Web服務(wù)器默認(rèn)根目錄。 <ul><li> <a href="/exp/ImageMain.htm"> Java based dynamic Ad-Banner</a></li> </ul> 運(yùn)行應(yīng)用的步驟: 打開一個(gè)DOS窗口,進(jìn)入<默認(rèn)Web目錄>/exp,執(zhí)行“java ImageApplication”。系統(tǒng)將顯示“Server started listening at port 6011”。注意確保classpath環(huán)境變量指向了當(dāng)前工作目錄。 |
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!