基于ajax的聊天室

数据库采用mysql,字段为id(int),username(varchar),message(text),inserTime(datetime)

 

 

客户端JSP:

 

<script type="text/javascript">
     $(function(){
     $("#timestamp").val("");   //这里必须要把 timestamp 设为空,否则刷新页面后会还缓存着以前的值。

        run();
        var interval;
            function run() {
               interval = setInterval(chat, "10000");    //定时器,每10秒取服务器取一次
            }

            function chat() {   // 去服务器后台取得新的聊天记录
              
       $.ajax({ 
       type:"POST", //请求方式
       url:"chatAction.do", //请求路径
       cache: false,
       data:"timestamp="+$("#timestamp").val(),   
       dataType: "text",   //返回值类型
            success:function(xml){    
                $("#timestamp").val($("timestamp",xml).text());
                $(xml).find("chat").each(function(i){
                
            	   $("#chat").append($(this).children("username").text());
            	   $("#chat").append(":");
            	   $("#chat").append($(this).children("message").text());
            	   $("#chat").append("</br>");
            	})
            }
       });
            }
      
      
      $("[name=save]").click(function(){    // 保存聊天记录

       $.ajax({ 
       type:"POST", //请求方式
       url:"chatAction.do", //请求路径
       cache: false,   
       data:$("#form1").serialize(),//传参
       dataType: "text"   //返回值类型

       });
      
      })
      
      $("#closeChat").click(function(){   //  关闭定时器
      
          clearTimeout(interval);
      
      })
      	 
    });
    
   
   
</script>

 <body>
          聊天室
          <table border="1" height="300" width="500"><tr><td><span id="chat"></span></td></tr>
        
         </table>
         <br>

         
        <form id="form1" type="post" action="">
                                                姓 名:<input name="username" type="text">
                                                信 息:<input name="message"  type="text"> 
                  <input id="timestamp" name="timestamp" type="hidden" value=""/>                                                          
                  <input name="save" type="button" value="提交">
        </form>
        
        <input id="closeChat" type="button" value="关闭"/>
            
  </body>

 
 

    后台服务器端JAVA:

 

 

 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		  
		  String username = req.getParameter("username");
		  String message = req.getParameter("message");
		  String timestamp = req.getParameter("timestamp");
		  System.out.println(username);
		  System.out.println(message);
		  System.out.println(timestamp);
		  
		  if(timestamp==null||timestamp.equals("")){   //表示是第一次进入聊天页面或者点刷新后,这时传来的timestamp会是空的,要查询在此前10秒的聊天记录
			  Date date = new Date();
			  date.setSeconds(date.getSeconds()-10);
			  timestamp = format.format(date);
		  }


		  if(username!=null&&!username.equals("")){
			  
			  Chat chat = new Chat();
			  chat.setUsername(username);
			  chat.setMessage(message);
			  chat.setInsertTime(format.parse(format.format(new Date())));
			  chatService.saveChatMessage(chat);
		  }
		  else{
			  
			  Date time = format.parse(timestamp);
			  List list = chatService.getChatMessage(timestamp);  // 得到聊天记录的list


			  time.setSeconds(time.getSeconds()+10);  // 把时间+10秒后传回给客户端
			  
			  res.setContentType("text/html;charset=UTF-8");  //必须有,否则会乱码
			  PrintWriter out = res.getWriter();
	          StringBuffer s = new StringBuffer();
	          s.append("<?xml version=\"1.0\" encoding=\"utf-8\" ?>");
	          s.append("<chatAll>");
	          s.append("<timestamp>"+format.format(time)+"</timestamp>");
	          
	          for(int i=0;i<list.size();i++){
	        	 Chat c = (Chat)list.get(i);
	             s.append("<chat><username>"+c.getUsername()+"</username><message>"+c.getMessage()+"</message></chat>");
	          
	          }
	          s.append("</chatAll>");
	          System.out.println(s);
			  out.print(s);
		  }
		  
        
		
		
		  return null;
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值