ajax聊天室(JSP版)3

原创 2007年09月15日 20:40:00

有了以上三个javabean,只是==有了三个数据表(事实上,如果要保存聊天信息在数据库中,建立表进行插入删除更新即可),还要有掌控全局的ChatroomManager类。下面先给出完整代码。


package org.jvk.chatroom.service;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import org.apache.commons.digester.Digester;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jvk.chatroom.bean.Message;
import org.jvk.chatroom.bean.Room;
import org.jvk.chatroom.bean.User;
 
import org.xml.sax.SAXException;
 
publicclass ChatroomManager {
    private static Log log = LogFactory.getLog(ChatroomManager.class);
    private ChatroomManager() {
    }
    private static ChatroomManager instance = new ChatroomManager();
    private Map<String, Room> rooms = new HashMap<String, Room>();
    public static ChatroomManager newInstance() {
       return instance;
    }
 
    public synchronized void config(FileInputStream in) throws IOException, SAXException{
       log.info("初始化聊天室配置信息");
       Digester digester = new Digester();
       digester.setValidating(false);
       digester.push(this);
       digester.addObjectCreate("rooms/room", Room.class);
       digester.addBeanPropertySetter("rooms/room/name", "name");
       digester.addBeanPropertySetter("rooms/room/notice", "notice");
       digester.addBeanPropertySetter("rooms/room/maxMessage", "maxMessage");
       digester.addBeanPropertySetter("rooms/room/maxUser", "maxUser");
       digester.addSetNext("rooms/room", "addRoom");
       digester.parse(in);
       log.info("聊天室配置信息初始化完毕");
    }
   
    public synchronized void config(File file) throws IOException{
       log.info("聊天室配置文件:"+file.getAbsolutePath());
       config(new FileInputStream(file));
    }
 
    public Map<String, Room> getRooms() {
       return rooms;
    }
 
    public void setRooms(Map<String, Room> rooms) {
       this.rooms = rooms;
    }
 
    public Room getRoom(String roomName) {
       return rooms.get(roomName);
    }
 
    public Room getRoom(User user) {
       return user.getRoom();
    }
 
    public void addRoom(Room room) {
       rooms.put(room.getName(), room);
    }
 
    public void addUserToRoom(User user) {
       rooms.get(user.getRoom().getName()).addUser(user);
    }
 
    public void removeUserFromRoom(User user) {
       rooms.get(user.getRoom().getName()).removeUser(user);
    }
 
    public void addMessageToRoom(Message message, Room room) {
       rooms.get(room.getName()).addMessage(message);
    }
 
    public List<Message> getMessagesFromRoom(User user) {
       return user.getRoom().getMessages(user);
    }
 
    public List<User> getUsersFromRoom(User user) {
       return getRoom(user).getUsers(user);
    }
 
    public boolean exists(String roomName, String userName) {
       Room room = getRoom(roomName);
       for (User user : room.getUsers())
           if (user.getName().equalsIgnoreCase(userName))
              returnt rue;
       return false;
    }
   
    public boolean exists(Room room, String userName) {
       for (User user : room.getUsers())
           if (user.getName().equalsIgnoreCase(userName))
              return true;
       return false;
    }
}

其中 config(FileInputStream in)  方法通过读取配置文件初始化聊天室。配置文件是一个XML格式文件,解析XML文件时使用了commons-digester 包的Digester。Digester可以让我们轻易地把XML转换为Java对象。(详情请访问http://commons.apache.org/digester/)。
从以下的java代码
       digester.addObjectCreate("rooms/room", Room.class);
       digester.addBeanPropertySetter("rooms/room/name", "name");
       digester.addBeanPropertySetter("rooms/room/notice", "notice");
       digester.addBeanPropertySetter("rooms/room/maxMessage", "maxMessage");
       digester.addBeanPropertySetter("rooms/room/maxUser", "maxUser");
       digester.addSetNext("rooms/room", "addRoom");
可以猜到XML配置文件是这样的:
<?xml version="1.0" encoding="GBK"?>
<rooms>
    <room>
       <name>我的聊天室</name>
       <notice>欢迎交流学习</notice>
       <maxMessage>10</maxMessage>
       <maxUser>100</maxUser>
    </room>
    <room>
       <name>你的聊天室</name>
       <notice>欢迎交流娱乐</notice>
       <maxMessage>15</maxMessage>
       <maxUser>150</maxUser>
    </room>
</rooms>
 
这个类除了读取配置文件进行初始化外,还担当“门面模式”的角色,以后不管如何操作Message、User和Room三个类,都通过ChatroomManager间接进行。 
因为Room对象包含了User和Message,所以这里只需要一个Room的集合:
    private Map<String, Room> rooms = new HashMap<String, Room>();

只要有Room在手,一切掌握之中。

接下来可以进行 Servlet 的编写了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

JSP在线聊天室——实验五之软件运行界面2

管理界面                 输入用户名搜索聊天记录        ...

AJAX_JSP 聊天室1_0 源码

  • 2007-07-27 13:51
  • 12KB
  • 下载

jsp,ajax实现的聊天室

  • 2012-02-20 10:51
  • 2.45MB
  • 下载

JSP在线聊天室——实验一之需求分析

背景说明:         随着Internet的普及和宽带网络技术的成熟,越来越多的用户进入到网络世界中享用浏览新闻、查询信息、发送邮件、在线观看电影等服务,享受网络带来的便利和办公的高效。习惯于...

jsp + ajax 聊天室

  • 2009-08-31 09:20
  • 178KB
  • 下载

jsp聊天室AJAX

  • 2009-04-25 23:56
  • 232KB
  • 下载

JSP在线聊天室——软工课程心得与体会

这门课让我受益颇丰!很多知识都没接触过,真的是长见识了,这门课学的不仅仅是理论的,相比于其他课,这课的实战性更强,更有利于对自己所学的知识加强理解,而且老师还告诉了学习方法,虽然一时半会不可能像老师说...

Ajax+jsp做的聊天室

内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)