一、同頁Applet之間的通信
嵌入同一頁中的Applet之間可以通過java.applet包中提供的方法直接進行通信。
首先,利用Applet類中的方法getAppletContext()得到當前運行頁的上下文環境AppletContext對象:
public AppletContext getAppletContext();
通過AppletContext對象,就可以得到當前Applet運行環境的信息。 接口AppletContext中定義了方法getApplets()可以得到當前頁中的其他Applet對象。
public abstract Applet getApplets(String name);
public abstract Enumeration getApplets();
(Enumeration中提供了方法hasMoreElements()和nextElement()來獲取其中的元素。)
得到同頁中的其他Applet對象後,就可以調用這些Applet的public方法,從而達到同頁Applet之間通信的目的。
例子:
GetApplets:獲取同頁中其它Applets的信息。
Sender:獲取同頁中的Applet “Receiver”,並通過其方法向它發送消息。
Receiver:接收同頁中Applet “Sender”的消息。
<HTML>
<HEAD>
<TITLE>Communication among Appelt in same page.</TITLE>
</HEAD>
<applet code=Sender.class width=450 height=200 name="I'm Sender">
<param name="receiverName" value="I'm Receiver">
</applet>
<p>
<applet code=Receiver.class width=450 height=35>
<param name="name" value="I'm Receiver">
</applet>
<p>
<applet code=GetApplets.class width=400 height=150>
</applet>
</HTML>
二、Applet和瀏覽器之間的通信
Applet中提供了很多函數來與顯示它的瀏覽器之間進行通信:
public URL getCodeBase()
public URL getDocumentBase()
public String getParameter(String name)
public void showStatus(String msg)
public AppletContext getAppletContext()
Applet可以用這四個方法從瀏覽器中獲取信息或者向瀏覽器發送信息。
public String[][] getParameterInfo()
public String getAppletInfo()
瀏覽器可以使用Applet的這兩個方法來獲取Applet的相關信息。
public AppletContext getAppletContext()
同一頁面不同Applet之間的通信也是要通過這個方法來獲得起運行環境的(AppletContext),再利用AppletContext提供的方法getApplet()來獲取其它的Applet從而達到相互通信的目的。
AppletContext中還提供了showDocument()方法來向瀏覽器發送請求,以顯示一個URL頁面:
void showDocument( URL url)
void showDocument( URL url, String target )
void showDocument( URL url)
指定的HTML頁面將在Applet所在地瀏覽器窗口中顯示。
void showDocument( URL url, String target )
在本方法中,可以指明顯示HTML頁面的窗口,target就是用來指明在瀏覽器窗口的,不同的取值指明瞭不同的窗口:
“_self”: 在Applet所在的窗口中顯示HTML頁面
“_parent”: 在Applet所在的窗口的父窗口中顯示HTML頁面
“_top”: 在最前面的窗口中顯示HTML頁面
“_blank”: 在新的窗口中顯示HTML頁面
name: 在指定名稱的窗口中顯示HTML頁面
三、Applet的網絡通信
在Applet中可以進行網絡通信,但是由於安全性的限制,Applet只能和提供它的主機進行通信。
通過類Applet的getCodeBase()方法獲得提供它的主機的URL實例
利用類URL的getHost()方法得到主機名
利用類InetAddress的getByName()得到該主機的IP地址
通過IP地址,就可以進行網絡通信(TCP, UDP)
URL url = getCodeBase();
String host = url.getHost();
Try{
InetAddress address = InetAddress.getByName(host);
}catch(Exception e){}
Try{
DatagramSocket socket = new DatagramSocket();
DatagramPacket packet = new DatagramPacket(buf, length, address, port);
socket.send(packet);
}catch(Exception e){}