把用户的发言放到application里,当然可以,但这样会增加Servet容器的负担,因为application对象是由Servlet容器维护的,而且还需要不但需要刷新application内容,同时会造成Servlet容器的负担。Java做聊天室一个比较好的办法是,客户端用Applet,服务器用Servlet,
Applet与Servlet底层通信当然是Socket了,
通过HTTP通道的形式可以传递数据,Servlet向每个客户端建立的HTTP通道发数据,Applet向Servlet发送的数据以Servlet为中间站,然后Servlet向各个HTTP通道群发,来达到群聊
的目的,可以看出,这是不需要刷新的,

解决方案 »

  1.   

    楼上的方法是一般聊天室的方法,服务器负担小,客户端可以方便的扩展功能,如果是纯文字聊天,也可以采取这样的方法,自己建立一个聊天服务器,监听一个特殊的端口,当用户访问时,建立一个返回的连接(StreamWrite)out,然后向这个连接中写入数据,只要不关闭连接,就可以不刷新的情况下向用户发送信息,当然需要自己维护这些连接。
      

  2.   

    谢谢回复,二楼兄弟是好办法,但是用applet做客户端,那页面美观将大打折扣吧?可否用jsp?(也不刷新,如何实现),至于application过大,我是当application的字符到一定,比如有一发言后总字符>=10000,根据需要写入数据库,然后清空application
    三楼兄弟的办法不太明白,你不用socket?你如果把一个用户发言广播的呢?
      

  3.   

    不刷新!!那是不可能的!!
    聊天室的话还是不要用Applet!
    要做客户端还是得用swing.Applet只能嵌套的网页里面。
    具体聊天室没做过。
    只弄过简单的。
      

  4.   

    我想是不是刷新是指要不要刷新网页(或框架网页的一部分)的意思吧,如果用applet就不用刷新
      

  5.   

    csdn的高手们别潜水了,来帮帮俺这个新手吧
      

  6.   

    用Applet做前台显示,是确实不需要刷新的,因为它底层的流还保持着。像你说的那样用Applet,页面美观会打折扣,当然用JSP也是可以的,
    方法有两种:
    第一种:就是定时刷新,这种比较简单,但页面会出现抖动(频繁刷新导致的)。而且每次都是把    Application里面的发言向Browser写入,很明显数据量大还重复,这种效率是很低下的。第二种:就是利用隐藏框架+JavaScript定时添加信息(记住了,是添加信息,而不是刷新信息)。
    框架集包含三个frame,如下:
    文本页frametext.htm;name="content"(客人发言显示,记住了,专用来显示)
    输入页frameinput.jsp; (客人输入信息)
    刷新页framerefresh.jsp; (将它设置为隐藏的,这样就不会出现页面抖动了。)
    对于framerefresh.jsp,设置<meta>标签,
    <meta http-equiv="refresh" content="2"><!--定时刷新获取最新信息--> 每当来新信息后,利用JavaScript取得frametext.htm的document对象,
    top.content.document.write("客人的发言"),
    这样不就实现了添加信息了吗?页面显示很平滑,还有些聊天室有些自动清屏,滚屏等功能,不就是一段JavaScript程序的调用吗?
      

  7.   

    applet做客户端通过socket与服务器通讯..至于客户的美观..可以用html来实现.applet大小设定为0,0,也就是不显示..你的applet完全可以和javascript通讯啊.美观的部分完全可以用html来完成...
      

  8.   

    诸位高手的的想法我觉得很有意思,但是一般的聊天室还可以,如果是比较大的聊天室,比如同时在线几百人的时候,我想这种解决方案是不时就漏出弊端了?server端要开辟很多数据链接池,服务器的内存消耗会不会很吃紧?
    小弟有个想法,不过还没有时间具体实践。
    思路可以说一下:在服务器端建立一个数据库代理,到数据库只要开辟个位数个链接池,然后这个代理定时读取、写入数据库,聊天室段定时扫描代理的输出(可以是一个日志(http方式),也可以直接输出到socket口(Applet方式)),需要写数据时,反之
    主要是为了避免对数据库的同时大量操作,造成服务器过载。
    呵呵,瞎想的,还往高手指点!
      

  9.   

    guowei_man(-=[软体蝰蛇]=-) :
    你还要多多学习,