2008年11月24日 星期一

Java Applet與瀏覽器間的通信技術

摘  要:本文研究了Java Applet程序與互連網瀏覽器之間的通信技術,重點闡明了getParameter()、showStatus()以及showDocument()等方法的使用技巧。

關鍵字:Java Applet,瀏覽器,通信

在應用Java技術進行軟件開發時,通常都會遇到Java Applet程序與互連網瀏覽器之間的通信的問題。在java.applet包中的Applet類裡提供了許多方法,使之可以與瀏覽器進行通信,包括getCodeBase()、getDocumentBase()、getParameter()、getParameterInfo()、showStatus()、getAppletInfo()等方法。另外,還有java.applet包中的的AppletContext類裡的showDocument()方法。

本文重點討論getParameter()、showStatus()和showDocument()的用法和技巧。

一、getParameter()方法

Java Application通過命令行接受用戶參數,在Applet中,這個任務是通過HTML文件的另一個專門標記<PARAM>來完成的。從下面的例子中可以看出它的使用方法:

<HTML>

<BODY>

<APPLET code="AppletParam.class" height=60 width=300>

<PARAM name=varname value="Liu">

<PARAM name=varnum value=30>

</APPLET>

</BODY>

</HTML>

這個HTML文件中嵌入了一個名為AppletParam的Applet,同時在Applet運行時將向它傳遞兩個字符串參數:一個參數名為varname,取值為「Liu」;另一個參數名為varnum,取值為30。可見每個<PARAM>標記都只能傳遞一個字符類型的參數,這個參數的名字用來把它和其他參數區分開來,用name指定,這個參數的參數值用value指定。

Applet利用getParameter()方法來獲取HTML傳遞來的參數。這個方法的格式為:

String getParameter(String name);

該方法的功能是返回HTML中設定的值。字符串參數表示它所希望獲取的HTML參數的名字(即name指定的參數名)。方法的返回值是一個字符串對象,即HTML文件中value指定的字符串,如果希望這個參數是其他類型,還要進行參數類型的轉換。在處理Applet參數時,通常要給出缺省值,以防止用戶未給出該參數或給出非法參數值而使程序無法執行。

下面是ApplerParam.java的源代碼,注意觀察Applet如何從HTML文件中獲取參數。

import java.applet.Applet;

import java.awt.Graphics;

public class AppletParam extends Applet{    //定義主類

        private String name;    //用於接收HTML參數的程序變量

        private int num;

        public void init(){

             name=getParameter("varname");   //接收HMTL中傳遞的參數

             num=Integer.parseInt(getParameter("varnum"));

        }

        public void paint(Graphics g){

            g.drawString("Hello "+name+" ! Your are "+num+" years old.",10,20);

        }

}

二、showStatus()方法

Applet可以通過顯示簡短的狀態串,報告Applet的運行情況,狀態串顯示在瀏覽器或Appletviewer窗口的底部。在瀏覽器中,一個Web頁上的所有Applet與瀏覽器本身共享同一狀態顯示域。Applet顯示狀態串使用showStatus()方法,showStatus()方法就是用來在瀏覽器的狀態條顯示信息。這個方法的格式為:

void showStatus(String msg);

下面的例子說明了如何使用showStatus()方法,該程序的功能是單擊按鈕button,將文本框txt裡的文字顯示在瀏覽器的狀態條中。

import java.awt.*;

import java.awt.event.*;

import java.applet.*;

public class UIApplet extends Applet implements ActionListener{

TextField txt;

Button button;

public void init(){

            txt=new TextField(10);

            add(txt);       //填加文本域組件

       button=new Button("Show");

            button.addActionListener(this);

            add(button);    //填加按鈕組件

}

public void actionPerformed(ActionEvent e){//響應按鈕事件的事件處理方法

            showStatus(txt.getText());      //將文本域內容顯示在狀態行

        }

}

通常這一信息只是暫時性的,所以不應該用於顯示重要的信息或用於調試。由於狀態顯示域位置不突出,並且隨時可能被瀏覽器或其他Applet重寫,因而狀態串通常只應是一些不常用的輔助性的信息。對於一些至關重要的提示和警告信息,不要作為狀態串顯示在狀態行,應該顯示在Applet區域本身或是顯示在標準輸出上。

對於重要的信息或調試時要使用的信息,應該使用類System把它輸出到標準輸出,在標準輸出上報告診斷信息主要用於調試Applet。另外,當一個Applet生命週期出現了未捕獲的異常時也可以從標準輸出看到一些消息。標準輸出的確切顯示位置不確定,它依賴於瀏覽器的實現以及對瀏覽器或Appletveiwer的用法,如果在Unix的Shell窗口使用瀏覽器,則往標準輸出上顯示的字符串將輸出到shell窗口上,而在X窗口菜單使用瀏覽器,則標準輸出將打到console窗口。Netscape Navegator一般將Applet的標準輸出放到Java console窗口,該窗口由Options萊中彈出。

三、showDocument()方法

showDocument()方法是AppletContext類的方法。它可以用來請求瀏覽器顯示一個URL地址對應的HTML文件,並且可以控制顯示在哪個瀏覽器窗口。它的格式如下:

void showDocument(URL url);

或者

void showDocument(URL url,String target);

具有一個參數形式的showDocument()指示瀏覽器在指定的URL顯示有關文檔,它沒有指出顯示文檔的窗口,指定的HTML文件將在Applet所在的窗口中顯示。

具有兩個參數的showDocurnent()進一步指定顯示文檔的窗口,第二個參數target可以指明顯示Applet的窗口,可以取下列值:

「_self」在Applet的窗口中顯示文檔。

「_parent」在Applet窗口的父窗口中顯示文檔。若Applet是頂級窗口,效果同「_self」。

「_top」在Applet窗口的頂級窗口顯示本文檔。

「_blank」在一個新的無名窗口上顯示文檔。

「windowname」在名為windowname的窗口上顯示文檔,這一窗口可在需要時生成。

下面的程序在當前瀏覽器窗口中顯示了煙台大學的主頁。

import java.applet.*;

import java.net.URL;

import java.net.MalformedURLException;

public class sd extends Applet{

     public void init(){

    String us="http://www.ytu.edu.cn";  //www.ytu.edu.cn為煙台大學主頁地址

    URL u=null;

    AppletContext ac=getAppletContext();    //定義AppletContext類的對象ac

    try{

          u=new URL(us);

    }catch(MalformedURLException e){

           System.err.println("Malformed URL:"+us);

    }

    if(u!=null){

           ac.showDocument(u);      //在當前瀏覽器窗口顯示煙台大學主頁

    }

    }

}

如果將上面程序中的語句

ac.showDocument(u);

改為

ac.showDocument(u,"_blank");

那麼程序將保留原來的瀏覽器窗口,然後打開一個新的瀏覽器顯示煙台大學主頁。

參考文獻

1. 劉其成等. Java語言基礎教程. 石油大學出版社,2001

2. 劉其成等. 基於Java的DHTML技術及其應用. 微型機與應用. 2000, 12

3. 劉其成等. 面向對象的柔性設計與控制理論. 計算機工程與應用. Vol 38, No.18
4. 劉其成等. 基於Java數據報通信技術的聊天室設計與實現. 信息技術. 2002, 8

引用

http://www.comprg.com.cn/detail.asp?hw_id=1163

沒有留言: