4.6 Applet
Applet可以通过TCP/IP套接字在网络上进行通信,不过对于它们如何通信以及可以与谁通信有一些限制。如果没有这些限制,可信任的浏览器就可能执行有害的applet程序,例如,可能会发送欺骗邮件,或在用户使用浏览器时试图攻击其他系统等。这些安全性限制是由Java的安全管理器强制实施的,如果applet违法了这些限制,则将抛出SecurityException异常。通常,浏览器只允许applet与自身所在的宿主主机进行通信。这就意味着applet限制为只能与在宿主主机上执行的应用程序通信,通常是创建该applet的Web服务器。有关applet编程的安全性限制列表不属于本书的讨论范围,不过这也没多大价值,因为如果使用浏览器的用户允许的话,其默认的安全限制也可以改变。
假设现在需要实现一个允许用户在浏览器中输入和保存笔记的applet。由于浏览器的安全性限制阻止了applet直接向本地文件系统保存数据,因此要使用有别于本地磁盘输入输出的其他方法来保存笔记。FileClientApplet.java(见本书网站)实现了一个applet,它允许用户在一个编辑窗口中输入文本,点击“保存”按钮后,通过网络将文本复制到一个服务器上(运行在5000端口)。服务器,TCPFileServer.java(见本书网站),再将数据保存到一个文件中。它需要一个端口号(使用与applet对应的5000端口)和文件名作为参数。该服务器程序必须运行在向浏览器提供applet的Web服务器上。注意该服务器并没有任何applet特性。网页上的FileClientApplet.html文件演示了如何将applet整合到一个网页中。