一、同页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){}