聊天室 您所在的位置:网站首页 javaweb聊天室网页结构 聊天室

聊天室

2024-06-05 20:33| 来源: 网络整理| 查看: 265

文章目录 一、简介:项目说明:实现的主要功能:系统架构: 二、项目代码和demo地址项目代码:项目demo地址: 三、具体的功能实现:登录功能:单点登录:聊天功能的实现:踢人功能(简单的分权限) 四、补充说明关于代码:关于项目部署:

一、简介: 项目说明:

一个简易的javaWeb聊天室

实现的主要功能:

1、单点登录 2、聊天 3、权限分层(管理员有踢人权限)

系统架构:

Servlet+JSP+JavaBean+JDBC

二、项目代码和demo地址 项目代码:

代码链接:https://pan.baidu.com/s/1loCBLmyP8FklWKc4dx2HVg 提取码:xeti

项目demo地址:

点此访问聊天室demo

登录账户: 用户名:aaa,密码:aaa 用户名:bbb,密码:bbb 用户名:ccc,密码:ccc 。。。。。。(以此类推)

三、具体的功能实现: 登录功能:

1、创建实体类User 2、UserServlet处理数据,封装接收到的数据并调用Service层处理数据 3、Service层调用UserDao的登录方法 4、UserDao层定义方法接口。UserDaoImple为实现类,实现登录方法。

单点登录:

1、用一个map集合存储在线人员列表 2、注册一个监听器监听ServletContext对象创建和销毁

public class MyServletContextListener implements ServletContextListener{ public void contextInitialized(ServletContextEvent sce) { Map userMap = new HashMap(); sce.getServletContext().setAttribute("userMap", userMap); } public void contextDestroyed(ServletContextEvent sce) { } }

3、在web.xml中注册监听器

com.listener.MyServletContextListener

4、用户第二次登录的时候先判断map中中是否已存储该用户,若存在就销毁其对应的session 在这里插入图片描述

聊天功能的实现:

1、前端send方法发送用户输入的内容

function send(){ if(form1.to.value==""){ alert("请选择聊天对象!"); return false; } if(form1.content.value==""){ alert("发送信息不可以为空!"); form1.content.focus(); return false; } // $("#form1").serialize():让表单中所有的元素都提交. // jquery提交数据.{id:1,name:aa,age:25} $.post("${pageContext.request.contextPath}/user?"+new Date().getTime(),$("#form1").serialize(),function(data){ $("#content").html(sysBBS + data + ""); }); }

2、将输入内容在servlet层处理成前端可展示的页面属性

public String sendMessage(HttpServletRequest req,HttpServletResponse resp) throws IOException{ // 1.接收数据 。 System.out.println("sendMessage invoke...."); String from = req.getParameter("from"); // 发言人 String face = req.getParameter("face"); // 表情 String to = req.getParameter("to"); // 接收者 String color = req.getParameter("color"); // 字体颜色 String content = req.getParameter("content"); // 发言内容 String sendTime = new Date().toLocaleString(); // 发言时间 // 获得ServletContext对象. ServletContext application = getServletContext(); // 从ServletContext中获取消息 String sourceMessage = (String) application.getAttribute("message"); // 拼接发言的内容:xx 对 yy 说 xxx sourceMessage += "" + from + "" + face + "对[" + to + "]说:" + "" + content + "(" + sendTime + ")"; // 将消息存入到application的范围 application.setAttribute("message", sourceMessage); return getMessage(req, resp); }

3、前端接收到servlet处理后的元素展示

踢人功能(简单的分权限)

1、前端确认用户身份是否为管理员,若是管理员则显示踢人按钮

踢下线

2、在UserServlet中写管理员踢人的方法,逻辑如下 1.接收参数 2.踢人:获得userMap集合,从userMap中将用户对应的session销毁. 3.重定向

该方法大致代码:

public String kick(HttpServletRequest req,HttpServletResponse resp) throws IOException{ // 1.接收参数 int id = Integer.parseInt(req.getParameter("id")); // 2.踢人:从userMap中将用户对应的session销毁. // 获得userMap集合(在线列表) Map userMap = (Map) getServletContext() .getAttribute("userMap"); // 根据这个用户对应的session得到相应id,再去数据库中查询. // 重写user的equals 和 hashCode 方法 只要用户的id相同就认为是同一个用户 User user = new User(); user.setId(id); // 从map集合中获得用户的对应的session HttpSession session = userMap.get(user); // 销毁session session.invalidate(); // 重定向到页面 resp.sendRedirect(req.getContextPath()+"/main.jsp"); return null; }

3、完成service层和dao层的实现方法。(感兴趣的同学可以下载代码查看,在此不做赘述)

四、补充说明 关于代码:

文中代码片段主要用作功能实现的说明,项目的详细代码文章开头已给出。感兴趣的同学可以下载查阅,如有不足欢迎指正

关于项目部署:

代码下载完成后配一下数据库连接,并建表即可运行。 1、配置数据库连接: 修改src目录下的c3p0-config文件 在这里插入图片描述 2、建表: 建表语句如下:

SET FOREIGN_KEY_CHECKS=0; DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(20) DEFAULT NULL, `password` varchar(20) DEFAULT NULL, `type` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8; INSERT INTO `user` VALUES ('1', 'aaa', 'aaa', 'admin'); INSERT INTO `user` VALUES ('2', 'bbb', 'bbb', 'user'); INSERT INTO `user` VALUES ('3', 'ccc', 'ccc', 'admin'); INSERT INTO `user` VALUES ('4', 'ddd', 'ddd', 'user');


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有