Javaweb 聊天室

Javaweb 聊天室Javaweb聊天室前言java课程结束了之后,老师要求我们用java做一个关于聊天室的课程设计,于是我就想做一个web应用,在这里只是纯分享,如果想要源码的,可以在评论里说。一、实验目的做一个Javaweb聊天室系统1.实现登录功能2.注册功能3.发送聊天内容功能4.接收消息5…

大家好,又见面了,我是你们的朋友全栈君。

                                         Javaweb 聊天室

2020.5.13更新:

最近有很多小伙伴私信我,跑不动这个项目,数据库报错之类的。然后我自己也去clone下来重新更新了一下,因为之前是用 eclipse 做的,我现在已经不用了,所以用 idea 重新跑了一下。关于如何在 idea 导入项目,请参考这两篇文章

https://www.jianshu.com/p/82446a31f0b9

https://www.cnblogs.com/best/p/8543022.html

可能会遇到的错误:

1. 与 servlet 相关的类飘红

Javaweb 聊天室

解决办法:导入 servlet.api.jar 包,导入 方法,如图,在本地 Tomcat 的 lib 目录下可以找到此 jar 包,如果没有请自行下载。

Javaweb 聊天室

导入成功之后,在依赖库下看到应该是这样的

Javaweb 聊天室

2、数据库相关的错误

很多小伙伴都是项目启动成功之后,数据库连接失败,我的数据库版本是 mysql 8.0.11,请检查你的数据库版本是否一致

Javaweb 聊天室

如果是 mysql 5.x,那么修改数据库连接字符串以及连接驱动

Javaweb 聊天室

Javaweb 聊天室

修改数据库连接配置之后,还要确保你的数据库以及数据表是否创建,创建完数据库执行以下 sql 即可

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键\r\n',
  `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户名',
  `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '密码',
  `type` tinyint(255) unsigned DEFAULT NULL COMMENT '1 代表管理员\r\n\r\n',
  `phone` varchar(11) DEFAULT NULL,
  `adress` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

3 其他错误

比如: 

Javaweb 聊天室

建议 Google 解决, 参考:https://stackoverflow.com/questions/11922323/java-sql-sqlexception-access-denied-for-user-rootlocalhost-using-password

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '%password%' WITH GRANT OPTION;

源码已同步到 GitHub,

源码地址:https://github.com/WeCanRun/Java-Web-ChatRoom

如果对你有帮助,可以点个 star

 

前言

java课程结束了之后,老师要求我们用java做一个关于聊天室的课程设计,于是我就想做一个web应用,在这里只是纯分享。

一、实验目的

做一个Javaweb聊天室系统

1.实现登录功能

2.注册功能

3.发送聊天内容功能

4.接收消息

5.在线人员列表显示

6..踢人功能

7.退出聊天室


逻辑功能实现

1. 实现登录功能
       先把从前台接收的数据封装起来,然后查询数据库,看数据库中是否有这个用户,如果没有则提示登录失败,如果有这个用户则先销毁之前的session,然后再检查此用户是否在其它地方登录,有的话则销毁它的session,强制下线。到这里才算登录成功,将页面跳转到主聊天界面。

2. 检查用户登录信息是否过期的实现
       获取session域中的User对象,判断该对象是否为空,如果为空则用户登录信息过期,提示用户重新登录,跳转到登录界面。

3. 注册功能的实现
       先把从前台接收的数据封装起来,然后检查用户输入的两次密码是否一致,如果不一致,则提示“登录失败,两次密码不一致”的错误,然后查询数据库是否有用户名一样的用户,如果有,则提示“注册失败,此用户已存在”,否则向数据库中插入用户信息,然后提示注册成功。

4. 聊天功能的实现
       发送消息:先获取从前台发送的聊天内容,然后拼接上已发送的聊天记录,再将消息存入到application的范围,最后调用接收消息的方法。
        接收消息:从ServletContext中获取消息,如果不为空则输出消息。

5. 在线人员列表显示功能的实现
       将登录进系统的用户与其对应的session存储到一个userMap中,然后显示出来

6. 踢人功能的实现
       接收前台传来的需要踢下线的用户id,然后在userMap中获取用户并销毁该用户的session   

7. 退出聊天室
       获得session然后将其销毁,跳转到登录界面


二、部分测试结果

把javawebchatroom项目部署到局域网上,在谷歌浏览器输入我此时的IP地址+8080端口进入默认的登录界面,输入事先存储在数据库的用户名和密码或者通过“前往注册”按钮到注册界面,登录和注册的每一个输入框都是必填的,如果直接按“登录”或“注册”按钮,将会提示请输入此字段,而且不会跳转界面,这是通过前台检测得到的效果。

1.登录界面

Javaweb 聊天室

输入错误的用户名或密码,按“登录”按钮后将会重新返回登录界面并提示红色的字“用户名或密码错误”

Javaweb 聊天室

2.注册界面

Javaweb 聊天室

  

注册功能也有防用户名重复,两次密码不一致等功能,每次注册的时候,系统都会从数据库查找是否有此用户以及两次密码是否一致,然后才将此用户插入数据库的用户表中

输入已存在的用户名zk,密码123,确认密码123:

Javaweb 聊天室

输入的两次密码不一致:

Javaweb 聊天室

输入一个新用户Tom,密码123456,确认密码123456,注册成功后直接跳转到登录界面:

Javaweb 聊天室

数据库中插入一个字段

Javaweb 聊天室

字段从左到右分别是id,用户名,密码,用户身份

3.测试聊天功能

Javaweb 聊天室

 Javaweb 聊天室

 

4.踢人功能

管理员可以把普通用户踢下线,而管理员不可以互踢,被踢着将会弹出一个“您已被踢下线的”提示框,点击确定后将回到登录界面。

 Javaweb 聊天室

5.退出聊天室功能

用户点击退出聊天室按钮即可退出聊天室,弹出“欢迎您下次光临”的提示框,点击确定之后,来到登录界面。

Javaweb 聊天室

三、实验总结

 本聊天室系统后台是通过servlet+MySQL实现的,前台的登录注册界面是通过jsp+sematic UI实现的。前台总共有五个页面分别是login.jsp,register.jsp,main.jsp,online.jsp,safe.jsp,用来展示登录,注册,主聊天界面,在线人员列表,防止用户未登录就访问主页面。

后台主要实现上述的业务逻辑功能。

遇到的问题及解决方案:

  1. 在本地进行完成测试之后,一开始部署到局域网上之后让室友帮忙测试发现注册功能出现问题,看了报错发现是MySQL的访问权限问题,之后我把mysql数据库的user表的root账户的Host改为%,原本是localhost,意思是所有用户都可以访问,原先是本机才能访问。Javaweb 聊天室
  2. 后来发现其实我在本机上注册的时候也会出现bug,进一步debug之后发现我在实现防止用户名重复的时候查询完数据库之后忘记判空了,判空之后bug就消失了!
  3. 部署到局域网,在部署项目的Tomcat里头有个server.xml,找到Host标签,把name改为自己的IP地址,如果IP经常变换,也可以改为0.0.0.0

  4. 每次输入项目名感觉有点繁琐,在部署项目的Tomcat里头有个server.xml,找到Context标签,把path里头的项目名去掉就可以了,默认8080端口访问此项目

     

 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/152171.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • C时间轮

    C时间轮看完了《linux高性能服务器编程》对里面的定时器很感兴趣。书中提到三种定时器,分别是:基于升序链表的定时器,基于时间轮的定时器,基于时间堆的定时器。三种定时器的实现书中均是给了C++代码,不过我对C++不太感兴趣,虽然现在在做C++开发,因此写了C版本的。书中定时器只给了封装的定时器类,没有给调用层代码,我是估摸着写了调用层代码。这里做个总结,以后可以翻翻:基于升序链表的定时器没太大难度,因此也懒

  • Centos安装mysql rpm包

    Centos安装mysql rpm包Centos安装mysqlrpm包安装mysql步骤:清理环境centos有可能会自带一个mariadb查看是否已安装rpm-qa|grep-imysql#(centos7默认系统自带的)rpm-qa|grep-imariadb#rpm-e加上包名,把mariadb包清掉rpm-e–nodepsXXXX可以看到用rpm删除会失败,提示有依赖关系的软件需要安装rpm删除时如果有依赖关系,可以用yumremove+包名来删除mariadb开始安装:

  • mac 开启hidpi_开启hidpi的缺点

    mac 开启hidpi_开启hidpi的缺点在macOS10.15之后,系统中存放DisplayProductID和DisplayVendorID的文件夹Overrides变为只读,若有些tool开HiDPI遇到一些麻烦或失灵的情况,可参考下文用one-key-hidpi的简易方法,具体如下:测试环境:(1)电脑:MacbookPro(2)系统:macOSCatalina10.15.6(3)显示器:SW270C…

  • 二叉树 (一)之各种原理理论概述

    二叉树 (一)之各种原理理论概述

  • docker 删除_Docker删除镜像和容器[通俗易懂]

    docker 删除_Docker删除镜像和容器[通俗易懂]当一个host中镜像和容器较多,需要重置时可选择删除其中部分或全部的镜像和容器。那么你就需要下面的操作了。1、删除容器1)首先需要停止所有的容器dockerstop$(dockerps-a-q)2)删除所有的容器(只删除单个时把后面的变量改为containerid即可)dockerrm$(dockerps-a-q)2、删除镜像1)查看host中的镜像dockeri…

  • 深入剖析通信层和RPC调用的异步化(上)

    深入剖析通信层和RPC调用的异步化(上)

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号