ajax聊天室(JSP版)3

有了以上三个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;
 
public class 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))
              return t 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 的编写了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
JASChatWeb 网页聊天室 1.0--群聊+私聊+贴 预览 http://ww1.sinaimg.cn/large/560ce489gw1dhm3ju5uxgj.jpg 经过多人 多浏览器测试,效果良好 实现了各种聊天常用功能 (1)群聊 (2)私聊 私聊窗口可拖动关闭 (3)在线用户列表 (4)修改文字颜色 (5)贴功能 可设置片大小, 并且可以预览 (6)清除聊天消息记录 (7)声音功能 并可手动关闭和打开 (8)头像 (9)表情 另内里有桌面和源程序,服务器端口设置了1215 ------------------------------------------------------- 如何使用,部署 MySql: (1)用winrar打开 JASChatWeb.war文件, 在目录 \WEB-INF\classes\com\jas\www 下找到 jaschatweb.sql文件, 解压到C盘根目录 (2)用winrar打开 JASChatWeb.war文件, 在目录 \WEB-INF\classes\com\jas\www 下找到 DB.java文件 找到: conn = DriverManager.getConnection("jdbc:mysql://localhost:3307/mydata?user=scott&password=tiger"); 把3307的端口改成你的mysql开放端口(默认是3306) (3)MySql中用管理员权限运行 source c:\jaschatweb.sql (建表文件) Tomcat: (1)把压缩包里的 JASChatWeb.war文件 放置到 tomcat/webapps目录下 (2)打开tomcat/conf/web.xml文件 ,找到 <session-timeout>30</session-timeout> 一行, 把30改成 1-5的数(作用设置是session超时时间,用于扑捉用户直接关闭浏览器时的下 线状态) 完成以上两步后打开tomcat即可在浏览器运行 http://你的IP:tomcat设置端口/JASChatWeb/ 打开 -------------------------------------------------------- --------------------------------------------------------------- 技术实现: JSP+Servlet+mysql+jquery+ajax+flash(实现各浏览器播放声音) 主要文件介绍: 前端 (1)login.jsp--登陆页,设置session,还有更改了用户的登陆状态 (2)index.jsp--主要聊天页面 (3)jas.js -- jquery+控制声音flash插件+颜色选择器 (4)jas2.js -- 页面主要逻辑的JS, 各种前端功能实现 (5)tom.js -- 后期做的实现了聊天框拖曳的JS (6)jas.css -- 页面布局 后台 (1)DB.java --用于JDBC的链接 (2)Deal.java --群聊的收发逻辑 和 数据库交互 (3)Ptalk.java -- 私聊的各种逻辑(收发只在内存中,没使用数据库) (4)UserList.java -- 用户列表的逻辑 (5)SL.java ServetLogout.java -- 两个监听器,一个负责监听用户session超时,另一个用于服务器关闭时清除用户登陆状态 -----------------------------------------------------------------

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值