当前位置: 技术问答>java相关
关于Applet和Servlet的通讯问题,紧急请教各位大侠。
来源: 互联网 发布时间:2015-04-09
本文导语: 一个B/S三层系统,客户端使用HTML+Applet,中间层使用Servlet。 Applet和Servlet的通讯方式:Applet创建到Servlet的URLConnection,通过连接获取输出流,在输出流上发送查询参数,类似:ClassID=1&ObjectID=2。Servlet收到...
一个B/S三层系统,客户端使用HTML+Applet,中间层使用Servlet。
Applet和Servlet的通讯方式:Applet创建到Servlet的URLConnection,通过连接获取输出流,在输出流上发送查询参数,类似:ClassID=1&ObjectID=2。Servlet收到请求,解析参数,将响应发送给客户端。特别说明:所有响应均采用对象封装,用于传送二进制数据(如图像)。Applet收到响应,将它表现出来即可。
由于二进制数据量很大,所以Applet不能一次加载所有数据,只能根据用户请求分次加载。Applet和同一个Servlet通讯两次,能够得到正确的结果。但是第三次通讯及其以后,就不稳定,Applet发送请求之后,不能收到服务器端的响应。发生IOException的原因在于:不能在一个输入流上读取数据之后,再从输出流发送查询参数。也就是说,同一个连接不能查询两次。于是每次查询数据之后,我都将URL连接对象设置为null,再调用System.gc()(根据SUN的说法,这一步优先级很低,不保证执行)。如此处理之后,在某些计算机上可以从始至终不出现任何问题(无论使用多久,目前已经有一个多月没出问题了,OS:Win2k Pro),在另外一些计算机上,只要第三次访问,就必定出现异常,导致数据不能加载。
所有输出流、输入流,在使用完毕之后(类似out.flush())都关闭(out.close())。但是URLConnection没有close()方法。
请教各位高手:如何实现等价于URLConnection.close()的方法,或者有更好的方法解决上述问题。
非常感谢您的回复!!!
Applet和Servlet的通讯方式:Applet创建到Servlet的URLConnection,通过连接获取输出流,在输出流上发送查询参数,类似:ClassID=1&ObjectID=2。Servlet收到请求,解析参数,将响应发送给客户端。特别说明:所有响应均采用对象封装,用于传送二进制数据(如图像)。Applet收到响应,将它表现出来即可。
由于二进制数据量很大,所以Applet不能一次加载所有数据,只能根据用户请求分次加载。Applet和同一个Servlet通讯两次,能够得到正确的结果。但是第三次通讯及其以后,就不稳定,Applet发送请求之后,不能收到服务器端的响应。发生IOException的原因在于:不能在一个输入流上读取数据之后,再从输出流发送查询参数。也就是说,同一个连接不能查询两次。于是每次查询数据之后,我都将URL连接对象设置为null,再调用System.gc()(根据SUN的说法,这一步优先级很低,不保证执行)。如此处理之后,在某些计算机上可以从始至终不出现任何问题(无论使用多久,目前已经有一个多月没出问题了,OS:Win2k Pro),在另外一些计算机上,只要第三次访问,就必定出现异常,导致数据不能加载。
所有输出流、输入流,在使用完毕之后(类似out.flush())都关闭(out.close())。但是URLConnection没有close()方法。
请教各位高手:如何实现等价于URLConnection.close()的方法,或者有更好的方法解决上述问题。
非常感谢您的回复!!!
|
源代码发给你。