JSP+AJAX 聊天室代码

tw-sack.js
js 代码
  1. /* Simple AJAX Code-Kit (SACK) */  
  2. /* 2005 Gregory Wild-Smith */  
  3. /* [url]www.twilightuniverse.com[/url] */  
  4. /* Software licenced under a modified X11 licence, see documentation or authors website for more details */  
  5.   
  6. function sack(file){   
  7. this.AjaxFailedAlert = "Your browser does not support the enhanced functionality of this website, and therefore you will have an experience that differs from the intended one.\n";   
  8. this.requestFile = file; // 提交的页面   
  9. this.method = "POST";   
  10. this.URLString = "";   
  11. this.encodeURIString = true;   
  12. this.execute = false;   
  13.   
  14. this.onLoading = function() { };//读取中   
  15. this.onLoaded = function() { };//已经读取   
  16. this.onInteractive = function() { };//交互中   
  17. this.onCompletion = function() { }; // 信息返回之后执行的方法   
  18. this.complete = function(){};//处理完毕   
  19. this.createAJAX = function() {   
  20. try {   
  21. this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");   
  22. catch (e) {   
  23. try {   
  24. this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");   
  25. catch (err) {   
  26. this.xmlhttp = null;   
  27. }   
  28. }   
  29. if(!this.xmlhttp && typeof XMLHttpRequest != "undefined")   
  30. this.xmlhttp = new XMLHttpRequest();   
  31. if (!this.xmlhttp){   
  32. this.failed = true;   
  33. }   
  34. };   
  35.   
  36. this.setVar = function(name, value){   
  37. if (this.URLString.length < 3){   
  38. this.URLString = name + "=" + value;   
  39. else {   
  40. this.URLString += "&" + name + "=" + value;   
  41. }   
  42. }   
  43.   
  44. this.encVar = function(name, value){   
  45. var varString = encodeURIComponent(name) + "=" + encodeURIComponent(value);   
  46. return varString;   
  47. }   
  48.   
  49. this.encodeURLString = function(string){   
  50. varArray = string.split('&');   
  51. for (i = 0; i < varArray.length; i++){   
  52. urlVars = varArray[i].split('=');   
  53. if (urlVars[0].indexOf('amp;') != -1){   
  54. urlVars[0] = urlVars[0].substring(4);   
  55. }   
  56. varArray[i] = this.encVar(urlVars[0],urlVars[1]);   
  57. }   
  58. return varArray.join('&');   
  59. }   
  60.   
  61. this.runResponse = function(){   
  62. eval(this.response);   
  63. }   
  64.   
  65. this.runAJAX = function(urlstring){   
  66. this.responseStatus = new Array(2);   
  67. if(this.failed && this.AjaxFailedAlert){   
  68. alert(this.AjaxFailedAlert);   
  69. else {   
  70. if (urlstring){   
  71. if (this.URLString.length){   
  72. this.URLString = this.URLString + "&" + urlstring;   
  73. else {   
  74. this.URLString = urlstring;   
  75. }   
  76. }   
  77. if (this.encodeURIString){   
  78. var timeval = new Date().getTime();   
  79. this.URLString = this.encodeURLString(this.URLString);   
  80. this.setVar("rndval", timeval);   
  81. }   
  82. if (this.element) { this.elementObj = document.getElementById(this.element); }   
  83. if (this.xmlhttp) {   
  84. var self = this;   
  85. if (this.method == "GET") {   
  86. var totalurlstring = this.requestFile + "?" + this.URLString;   
  87. this.xmlhttp.open(this.method, totalurlstring, true);   
  88. else {   
  89. this.xmlhttp.open(this.method, this.requestFile, true);   
  90. }   
  91. if (this.method == "POST"){   
  92. try {   
  93. this.xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded;charset=utf-8')   
  94. catch (e) {}   
  95. }   
  96.   
  97. this.xmlhttp.send(this.URLString);   
  98. this.xmlhttp.onreadystatechange = function() {   
  99. switch (self.xmlhttp.readyState){   
  100. case 1: //读取中   
  101. self.onLoading();   
  102. break;   
  103. case 2: //已经读取   
  104. self.onLoaded();   
  105. break;   
  106. case 3: //交互中   
  107. self.onInteractive();   
  108. break;   
  109. case 4: //处理完毕   
  110. self.response = self.xmlhttp.responseText;   
  111. self.responseXML = self.xmlhttp.responseXML;   
  112. self.responseStatus[0] = self.xmlhttp.status;   
  113. self.responseStatus[1] = self.xmlhttp.statusText;   
  114. self.onCompletion();   
  115. if(self.execute){ self.runResponse(); }   
  116. if (self.elementObj) {   
  117. var elemNodeName = self.elementObj.nodeName;   
  118. elemNodeName.toLowerCase();   
  119. if (elemNodeName == "input" || elemNodeName == "select" || elemNodeName == "option" || elemNodeName == "textarea"){   
  120. self.elementObj.value = self.response;   
  121. else {   
  122. self.elementObj.innerHTML = self.response;   
  123. }   
  124. }   
  125. self.URLString = "";   
  126. self.complete();   
  127. break;   
  128. }   
  129. };   
  130. }   
  131. }   
  132. };   
  133. this.createAJAX();   
  134. }   

display.js
js 代码
  1. function overInput(a){   
  2. getId("btn").style.border = "1px solid #54ce43"  
  3. getId("content").style.border = "1px solid #54ce43"  
  4. focs()   
  5. }   
  6. function outInput(a){   
  7. getId("btn").style.border = "1px solid #AAA"  
  8. getId("content").style.border = "1px solid #AAA"  
  9. focs()   
  10. }   
  11. function overBtn(a){   
  12. a.src = "images/hover.gif"  
  13. }   
  14. function outBtn(a){   
  15. a.src = "images/rest.gif"  
  16. }   
  17. function lrover(a){   
  18. a.style.backgroundColor = "#EEE"  
  19. }   
  20. function lrout(a){   
  21. a.style.backgroundColor = "#FFF"  
  22. }   
  23. function focs(){   
  24. getName("content").focus();   
  25. }   
  26. function clean(){   
  27. getName("content").value = ""  
  28. }   
  29. var chats = new Array()   
  30. var chatStart   
  31. function addChat(strChat){   
  32. if(chats.length > 199){   
  33. chats.shift()   
  34. }   
  35. chats.push(strChat)   
  36. chatStart = chats.length   
  37. }   
  38. function preChat(){   
  39. if(chatStart && chatStart >= 1){   
  40. if(chatStart == 1){   
  41. getName("content").value = chats[0]   
  42. chatStart = 0.5   
  43. }else{   
  44. chatStart -= 1   
  45. getName("content").value = chats[chatStart]   
  46. }   
  47. }   
  48. getId("loadifo").innerHTML = chatStart+","+chats.length   
  49. }   
  50. function nextChat(){   
  51. if(chatStart && chatStart < chats.length && chats.length > 1){   
  52. if(chatStart == 0.5){   
  53. chatStart = 1   
  54. }else if(chatStart == chats.length - 1){   
  55. chatStart = chats.length - 1   
  56. }else{   
  57. chatStart += 1   
  58. }   
  59. getName("content").value = chats[chatStart]   
  60. }   
  61. getId("loadifo").innerHTML = chatStart+","+chats.length   
  62. }   
  63. window.onload = function(){   
  64. getId("outs").onmousedown = function(){   
  65. overs = 1   
  66. }   
  67. getId("outs").onmouseout = function(){   
  68. overs = 0   
  69. focs()   
  70. }   
  71. getName("content").onkeydown = function(e){   
  72. if(document.all){   
  73. var Keys = event.keyCode;   
  74. }else{   
  75. var Keys = e.which;   
  76. }   
  77. //alert(Keys)   
  78. if(Keys == "38"){   
  79. preChat()   
  80. }else if(Keys == "40"){   
  81. nextChat()   
  82. }else if(event.ctrlKey && Keys == "13"){   
  83. doUsingPost()   
  84. }else if(event.ctrlKey && Keys == "46"){   
  85. clean()   
  86. }   
  87. }   
  88.   
  89. }   
  90. function getId(objId){   
  91. return document.getElementById(objId)   
  92. }   
  93. function getName(objName){   
  94. return document.getElementsByName(objName)[0]   
  95. }   

chat.js
js 代码
  1. var overs;   
  2. var clien = 0;   
  3. function doUsingGet(){   
  4. var ajax=new sack("chat.jsp");   
  5. ajax.setVar("clien",clien);   
  6. ajax.setVar("timeStamp",new Date().getTime());   
  7. ajax.method='GET';   
  8. ajax.onLoading=function(){   
  9. document.getElementById("zt").innerHTML="读取中......";   
  10. }   
  11. ajax.onCompletion=function(){// 信息返回之后执行的方法   
  12. CheckState(ajax.responseXML.documentElement);   
  13. }   
  14. ajax.onLoaded=function(){   
  15. document.getElementById("zt").innerHTML="已经读取......";   
  16. }   
  17. ajax.onInteractive=function(){   
  18. document.getElementById("zt").innerHTML="交互中......";   
  19. }   
  20. ajax.complete = function(){   
  21. document.getElementById("zt").innerHTML="处理完毕......";   
  22. }   
  23. ajax.runAJAX();   
  24. }   
  25. function doUsingPost(){   
  26. if(getName("content").value!=""){   
  27. var named = getName("named").value;   
  28. var content = getName("content").value;   
  29. var ajax=new sack("chat.jsp");   
  30. ajax.setVar("clien",clien);   
  31. ajax.setVar("content",content);   
  32. ajax.setVar("named",named);   
  33. ajax.setVar("timeStamp",new Date().getTime());   
  34. ajax.method='POST';   
  35. ajax.onLoading=function(){   
  36. document.getElementById("zt").innerHTML="读取中......";   
  37. }   
  38. ajax.onCompletion=function(){// 信息返回之后执行的方法   
  39. CheckState(ajax.responseXML.documentElement);   
  40. }   
  41. ajax.onLoaded=function(){   
  42. document.getElementById("zt").innerHTML="已经读取......";   
  43. }   
  44. ajax.onInteractive=function(){   
  45. document.getElementById("zt").innerHTML="交互中......";   
  46. }   
  47. ajax.complete = function(){   
  48. document.getElementById("zt").innerHTML="处理完毕......";   
  49. }   
  50. ajax.runAJAX();   
  51. focs();   
  52. clean();   
  53. }else{   
  54. alert("请输入对话内容!")   
  55. focs()   
  56. }   
  57. }   
  58.   
  59.   
  60. function CheckState(res){   
  61. var resLen = res.getElementsByTagName("items").length   
  62. if(getTag(res,0,"num") != clien){   
  63. clien = getTag(res,0,"num")   
  64. for(var i=0; i<resLen; i++){   
  65. var useName = getTag(res,i,"name")   
  66. var useMag = getTag(res,i,"conts")   
  67. var useIp = getTag(res,i,"ip")   
  68. if(clien != "0" && useMag != ""){   
  69. if(useName != ""){   
  70. var lis = "用户"+ useName + "说:" + useMag //+ " ["+ useIp + "]"   
  71. }else{   
  72. var lis = "用户 ["+ useIp + "] 说:" + useMag   
  73. }   
  74. }else{   
  75. var lis = ""  
  76. }   
  77. getId("chatmain").innerHTML += lis + "<br />"  
  78. }   
  79. innerSize()   
  80. }   
  81. }   
  82.   
  83. function innerSize(){   
  84. if(overs != 1){   
  85. if(getId("chatmain").offsetHeight < getId("outmain").offsetHeight){   
  86. getId("chatmain").style.marginTop = getId("outmain").offsetHeight - getId("chatmain").offsetHeight +"px";   
  87. }else{   
  88. getId("chatmain").scrollIntoView(false)   
  89. }   
  90. }   
  91. }   
  92. function getTag(response,i,objTagName){   
  93. try{   
  94. var nodeV = response.getElementsByTagName(objTagName)[i].firstChild.nodeValue;   
  95. }catch(e){   
  96. var nodeV = ""  
  97. }   
  98. return nodeV;   
  99. }   
  100. setInterval("doUsingGet()",1000)  


chat.jsp
jsp代码
  1. <%@ page contentType="text/xml; charset=gb2312" %>  
  2. <%!   
  3. String func(String content){   
  4. return content.replaceAll("<","<").replaceAll(">",">");   
  5. }   
  6. %>  
  7. <%   
  8. String ip=request.getRemoteAddr(); //客户端IP   
  9. int clien = new Integer(request.getParameter("clien")).intValue(); //当前是第几个用户 如果为0就是新来的用户   
  10. if(application.getAttribute("counts")==null){   
  11. application.setAttribute("counts",new Integer(0));   
  12. }   
  13. int counts = new Integer(application.getAttribute("counts").toString()).intValue(); //当前用户的ID   
  14. if(request.getParameter("content")!=null){   
  15. synchronized(this){   
  16. if(counts < 21){   
  17. int i = counts + 1;   
  18. application.setAttribute("counts",new Integer(i));   
  19. }else if(counts >= 21){   
  20. application.setAttribute("counts","1");   
  21. }   
  22. counts = new Integer(application.getAttribute("counts").toString()).intValue(); //当前用户的ID   
  23. int Cnum = counts;   
  24. String names;   
  25. String Msgs = request.getParameter("content");   
  26. // Msgs=new String(Msgs.getBytes("iso8859-1"),"gb2312");   
  27. application.setAttribute("ips" + Cnum,ip) ;   
  28. application.setAttribute("msgs" + Cnum,func(Msgs)) ;   
  29. if(request.getParameterValues("content") != null){   
  30. names = request.getParameter("named");   
  31. }else{   
  32. names = "";   
  33. }   
  34. application.setAttribute("names" + Cnum,names +"") ;   
  35. }   
  36. }   
  37. %><?xml version="1.0" encoding="gb2312" ?>  
  38. <ppl>  
  39. <num><%=application.getAttribute("counts")%></num>  
  40. <%   
  41. if(clien == 0){   
  42. %>  
  43. <items>  
  44. <ip><%=ip%></ip>  
  45. </items>  
  46. <%   
  47. }else if(clien < counts){   
  48. for(int i=clien; i<counts; i++){   
  49. int s = i+1;   
  50. String useName = (String)application.getAttribute("names" + s);   
  51. String useMsg = (String)application.getAttribute("msgs" + s);   
  52. String useIp = (String)application.getAttribute("ips" + s);   
  53. %>  
  54. <items>  
  55. <aaa><%=clien%> <%=s%></aaa>  
  56. <bbb><%=counts%></bbb>  
  57. <name><%=useName%></name>  
  58. <conts><%=useMsg%></conts>  
  59. <ip><%=useIp%></ip>  
  60. </items>  
  61. <%   
  62. }   
  63. }else if(clien > counts){   
  64. for(int i=clien; i<21; i++){   
  65. String useName = (String)application.getAttribute("names" + i);   
  66. String useMsg = (String)application.getAttribute("msgs" + i);   
  67. String useIp = (String)application.getAttribute("ips" + i);   
  68. %>  
  69. <items>  
  70. <name><%=useName%></name>  
  71. <conts><%=useMsg%></conts>  
  72. <ip><%=useIp%></ip>  
  73. </items>  
  74. <%   
  75. }   
  76. for(int m=1; m<=counts; m++){   
  77. String useNameM = (String)application.getAttribute("names" + m);   
  78. String useMsgM = (String)application.getAttribute("msgs" + m);   
  79. String useIpM = (String)application.getAttribute("ips" + m);   
  80. %>  
  81. <items>  
  82. <name><%=useNameM%></name>  
  83. <conts><%=useMsgM%></conts>  
  84. <ip><%=useIpM%></ip>  
  85. </items>  
  86. <%   
  87. }   
  88. }else if(clien == counts){   
  89.   
  90. }   
  91. %>  
  92. </ppl>  

index.html
html 代码
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />  
  5. <title></title>  
  6. <link href="images/chatstyle.css" rel="stylesheet" type="text/css" />  
  7.   
  8. <script type="text/javascript" src="js/display.js"></script>  
  9. <script type="text/javascript" src="js/chat.js"></script>  
  10. <script type="text/javascript" src="js/tw-sack.js"></script>  
  11.   
  12. </head>  
  13. <body>  
  14. <div id="zt"></div>  
  15. <div id="loadifo"></div>  
  16. <div id="outs"><div id="outmain"><div id="chatmain"></div></div></div>  
  17. <div class="in">昵称:   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值