(转http://blog.csdn.net/neusoftware_20063500/archive/2009/04/30/4140903.aspx)
这里只是做个测试,很简单,没有做好线程同步的问题,只是为了长轮询。
原理:
可以看:http://yiminghe.javaeye.com/blog/294781
AJAX 的出现使得 JavaScript 可以调用 XMLHttpRequest 对象发出 HTTP 请求,JavaScript 响应处理函数根据服务器返回的信息对 HTML 页面的显示进行更新。使用 AJAX 实现“服务器推”与传统的 AJAX 应用不同之处在于:
- 服务器端会阻塞请求直到有数据传递或超时才返回。
- 客户端 JavaScript 响应处理函数会在处理完服务器返回的信息后,再次发出请求,重新建立连接。
- 当客户端处理接收的数据、重新建立连接时,服务器端可能有新的数据到达;这些信息会被服务器端保存直到客户端重新建立连接,客户端会一次把当前服务器端所有的信息取回。
- <%@pagelanguage="java"pageEncoding="GBK"%>
- <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
- <html>
- <head>
- <title>chatroom</title>
- <Metahttp-equiv="pragma"content="no-cache">
- <Metahttp-equiv="cache-control"content="no-cache">
- <Metahttp-equiv="expires"content="0">
- <Metahttp-equiv="keywords"content="keyword1,keyword2,keyword3">
- <Metahttp-equiv="description"content="Thisismypage">
- <mce:scripttype="text/javascript"src="ext-2.2/adapter/ext/ext-base.js"mce_src="ext-2.2/adapter/ext/ext-base.js"></mce:script>
- <mce:scripttype="text/javascript"src="ext-2.2/ext-all.js"mce_src="ext-2.2/ext-all.js"></mce:script>
- <mce:scripttype="text/javascript"
- src="ext-2.2/build/locale/ext-lang-zh_CN.js"></mce:script>
- <mce:scripttype="text/javascript"src="jslib/mm.js"mce_src="jslib/mm.js"></mce:script>
- </head>
- <body>
- <divid="main"></div><!--显示聊天记录的区域-->
- username:
- <inputtype="text"name="username"/>
- <br>
- message:
- <inputtype="text"id="message">
- <br>
- <inputtype="button"value="submit"onclick="putMsg()">
- </body>
- </html>
定义mm.js,定义发送消息,定义接收消息的JS函数
- Ext.onReady(function(){
- getMsg();
- });
- functiongetMsg(){
- Ext.Ajax.request({url:"getMsg",callback:function(options,success,response){
- if(success){
- Ext.DomHelper.append(Ext.get("main"),response.responseText,true);
- }
- getMsg();
- }});
- }
- functionputMsg(){
- Ext.Ajax.request({url:"putMsg",params:{message:document.getElementById("message").value}});
- }
- /*
- Ext.Updater.defaults.indicatorText='<div><imgsrc="icon/loading.gif"mce_src="icon/loading.gif"width="20"height="20"/>refresh...</div>';
- varupdater=Ext.get('main').getUpdater();
- updater.update({
- url:"getMsg"
- });
- */