J2EE企业应用之Applet和Servlet的通信 - 编程入门网
etLength(percentUsed);
}
正如你看到的,HTTP文字流的使用相当简单而且直接。Applet建立到Servlet的连接,读取它返回的两行信息并对其进行适当的处理。 使用简单的文字流来交换数据有一个主要的弱点,那就是Applet并不直接理解数据的信息,而是要将其转换成一个有用的格式。在我们的例子中,将字符串转换成数字还不算太复杂,但是当我们试图处理一个更复杂的数据和对象时,转换的工作会很快变得无法控制。事实上,在下面我们可以看到我们一种简单的方法来处理这些复杂的数据。 J2EE企业应用之Applet和Servlet的通信(4)时间:2011-02-23HTTP对象流 你也许还没有意识到HTTP连接也可以用来传输二进制的数据,就象传输文本数据一样,但是事实上每次你从一个web看到图象时或者是下载.zip文件时都在使用这个功能。 我们可以利用这个功能并结合被称之为“对象序列”的技术从Servlet向Applet传输完整的Java对象。复杂的数据可以很容易地被传输,你不需要做任何解析和解释。 对象序列允许我们将对象封装到二进制数据流,它可以到达一个OutputStream可以到达的任何地方:磁盘、屏幕或者是在我们的例子中,通过一个HTTP连接到达一个Applet。 对象序列是JVM1.1和更高的版本才支持的功能,所以有一些老版本的浏览器不支持这一功能。但是Sun公司的Java插件几乎可以对所有的浏览器进行升级以支持最终版本的Java,这样它就可以支持对象序列。 使用HTTP对象流和使用HTTP文字流的方法几乎一样。我们建立一个到我们的web主机上的Servlet的URL连接并读取其返回的数据。只不过我们不再是将InputStream封装到DataInputStream中,而是将其封装到ObjectInputStream中。我们可以按照适当的类型读取其中的对象。 清单3显示了我们用来交换一个对象的一段代码,这个对象用来从Servlet获得有关书目的信息(包括作者、题目、价格和其它信息)。你会注意到在这里我们用ObjectOutputStream取代了清单1中的PrintWriter,其基本概念是相同的。 清单3
这个Servlet会生成书目对象的序列化版本,它可从它的fetchNextAlbum()方法作为一个数据流被接收。如果你通过一个web浏览器来访问这个Servlet,你会看到一堆垃圾,这是因为目前你只能处理文本而不能处理二进制数据的对象序列。 请注意这个对象必须执行Serializable接口以使其序列化。此外,任何引用这个对象的其他对象也必须执行Serializable接口。 在Applet端,每当用户单击Applet的Next按钮时,我们可以使用方法getNextAlbum()(程序如清单4所示)来从服务器获得书目对象。Applet将查询这个对象并显示其中的数据。 清单4
正如你看到的,对象流给我们提供了一个非常简便的方法在Applet和Servlet之前交换一组复杂的信息。请注意我们所处理的不是单纯的数据而是对象,所以你可以在客户端和服务器之间重用这个对象。这使得我们的程序更为智能化并且可以防止重复的逻辑处理。 J2EE企业应 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |