applet和servlet通信的问题

joe2002 2003-10-20 11:07:46
我想在applet中用线程来一直和servlet保持连接,这样做行不行?
我认为servlet是由请求来激活的吧。

applet中的run()如下:
public void run() {
try {
URL url = new URL("http://localhost:8080/examples/servlet/ComServServlet");
URLConnection ucon = url.openConnection();
ucon.setDoInput(true);
ucon.setUseCaches(false);
DataInputStream dis = new DataInputStream( ucon.getInputStream());
String result = dis.readUTF();
dis.close();
} catch ( Exception e){
stop();
}
}


servlet中的service()如下:
public void service(
HttpServletRequest req,
HttpServletResponse res)
throws ServletException, IOException {

res.setContentType( "application/octet-stream");
DataOutputStream dos = new DataOutputStream( res.getOutputStream());
for(int i=0; i<10; i++){
try{
dos.writeUTF( "★" + i);
Thread.sleep(1000);
}catch(Exception e){
dos.writeUTF("☆"+e.getMessage());
break;
}
}
dos.flush();
dos.close();
}

请各位高手指点一二,因为得到结果一直都是:★0,
我想知道为什么在网页上,不是隔一秒显示的是i+1后的值。
...全文
27 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
joe2002 2003-10-30
  • 打赏
  • 举报
回复
基本上applet+servlet/jsp是能实现画面不刷新,而applet内部的图表实时变动的需求。
谢谢各位。参与有分。
yaray 2003-10-20
  • 打赏
  • 举报
回复
servlet应该是收到请求时作出响应,响应结束后,此servlet就应该消失了;
楼主怎么能"在applet中用线程来一直和servlet保持连接"呢?
joe2002 2003-10-20
  • 打赏
  • 举报
回复
没人理。看来这个问题解决不了了。
joe2002 2003-10-20
  • 打赏
  • 举报
回复
有些不明白woderoom(小杨) 的建议。
web 服务模式本质上应该就是异步传输的吧。

能详细点告诉小弟吗?
woderoom 2003-10-20
  • 打赏
  • 举报
回复
楼上的,你不考虑网络的异步传输吗?这样得到的时间在网络不畅的时候是不可靠的。
joe2002 2003-10-20
  • 打赏
  • 举报
回复
不知道各位大虾是否有如下这样的需求:
在不影响原有庞大系统的前提下,在原有画面上显示一个实时移动的图标?

如果有这样的需求的,用applet+servlet是不是来的简单呢?
我觉得意义还是有的。

不过,如果有更好的办法的话,还请各位大虾再指点指点小弟。
在此谢过了。
joe2002 2003-10-20
  • 打赏
  • 举报
回复
实践证明这是可行的。刚才我自己又弄了一下,已经可以了。
是我的run里面写的有问题。我改成如下的样子了。
public void run() {
textfieldThread.setText("run()..."+i);
while(true){
repaint();
i++;
try {
URL url = new URL("http://localhost:8080/examples/servlet/ComServServlet");

URLConnection ucon = url.openConnection();
ucon.setDoOutput(true);
ucon.setDoInput(true);
ucon.setUseCaches(false);

DataOutputStream dos = new DataOutputStream( ucon.getOutputStream());
dos.writeUTF("req"+i);
dos.flush();
dos.close();

DataInputStream dis = new DataInputStream( ucon.getInputStream());
String result = dis.readUTF();
dis.close();

textfield.setText( result);
Thread.sleep(1000);
} catch ( Exception e){
textfieldThread.setText("※※※"+e.getMessage());
stop();
}
}
}
aixy 2003-10-20
  • 打赏
  • 举报
回复
这样做有什么意义?!
joe2002 2003-10-20
  • 打赏
  • 举报
回复
虽然response结束后,servlet会结束,但是我要是用线程让applet每隔1秒发一个request给servlet,应该是可以的吧。
littlecong 2003-10-20
  • 打赏
  • 举报
回复
用http维持长连接?

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧