聊天室外观:
数据库设计:
create table message( id int not null auto_increment, studentId varchar not null,//关联发表者 msg text not null,//发表内容 time date,//发表时间 primary key(id));
服务器端处理用户提交信息以及返回:
如果有用户提交信息便插入数据,并保存10条记录,多出的删除,不断更新;从数据库中获取数据并用字符串形式返回结果。
- 对应的model:
public class Message { private Long id; private Date time; private String msg; private Student student; //..get and set 方法省略}
//对应的xml
- dao层:
//获取前几条旧的聊天记录,是按id排列的 public List
getFrontNum(int number) { List messages = (List ) this.getHt().find("From Message m ").subList(0, number+1); return messages; } - sevice层:
//并发问题,两个同时插入 public boolean checkNumAndDel() { int number = this.getAll().size(); if(number >= 10){ //获取超过9条的旧记录,删除超过的旧记录 number = number - 10; List
ms = this.messageDao.getFrontNum(number); for(int i=0;i< ms.size();i++) { this.delete(ms.get(i).getId()); } } number = this.getAll().size(); return (number < 10); } - action层:
//timestamp=0第一次获取聊天记录,不等于0,不断更新聊天内容
public String saveUI() { if(this.timestamp == 0){ List
messages = this.messageService.getAll(); ActionContext.getContext().put("messages", messages); return "saveUI"; }else{ List messages = this.messageService.getAll(); for(int i =0 ;i
客户端的处理
- 提交聊天记录,然后服务器端保存数据,并返回聊天记录,呈现在页面上:HtMl代码:
//根据/分割Message
ms = message.substring(0,message.length).split("/"); for(var i=0;i<ms.length;i++) { var m = ms[i].split(","); htmlcode="<strong>"+m[0]+"</strong>:"+m[1]+"---"+m[2]+"<br/>"; } $("#messagewindow").append(htmlcode); } </script>
- 浏览器每隔一段时间更新数据(上面javascript的updateMsg函数)