大家好,又见面了,我是你们的朋友全栈君。
Javaweb 聊天室
2020.5.13更新:
最近有很多小伙伴私信我,跑不动这个项目,数据库报错之类的。然后我自己也去clone下来重新更新了一下,因为之前是用 eclipse 做的,我现在已经不用了,所以用 idea 重新跑了一下。关于如何在 idea 导入项目,请参考这两篇文章
https://www.jianshu.com/p/82446a31f0b9
https://www.cnblogs.com/best/p/8543022.html
可能会遇到的错误:
1. 与 servlet 相关的类飘红
解决办法:导入 servlet.api.jar 包,导入 方法,如图,在本地 Tomcat 的 lib 目录下可以找到此 jar 包,如果没有请自行下载。
导入成功之后,在依赖库下看到应该是这样的
2、数据库相关的错误
很多小伙伴都是项目启动成功之后,数据库连接失败,我的数据库版本是 mysql 8.0.11,请检查你的数据库版本是否一致
如果是 mysql 5.x,那么修改数据库连接字符串以及连接驱动
修改数据库连接配置之后,还要确保你的数据库以及数据表是否创建,创建完数据库执行以下 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 其他错误
比如:
建议 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.登录界面
输入错误的用户名或密码,按“登录”按钮后将会重新返回登录界面并提示红色的字“用户名或密码错误”
2.注册界面
注册功能也有防用户名重复,两次密码不一致等功能,每次注册的时候,系统都会从数据库查找是否有此用户以及两次密码是否一致,然后才将此用户插入数据库的用户表中
输入已存在的用户名zk,密码123,确认密码123:
输入的两次密码不一致:
输入一个新用户Tom,密码123456,确认密码123456,注册成功后直接跳转到登录界面:
数据库中插入一个字段
字段从左到右分别是id,用户名,密码,用户身份
3.测试聊天功能
4.踢人功能
管理员可以把普通用户踢下线,而管理员不可以互踢,被踢着将会弹出一个“您已被踢下线的”提示框,点击确定后将回到登录界面。
5.退出聊天室功能
用户点击退出聊天室按钮即可退出聊天室,弹出“欢迎您下次光临”的提示框,点击确定之后,来到登录界面。
三、实验总结
本聊天室系统后台是通过servlet+MySQL实现的,前台的登录注册界面是通过jsp+sematic UI实现的。前台总共有五个页面分别是login.jsp,register.jsp,main.jsp,online.jsp,safe.jsp,用来展示登录,注册,主聊天界面,在线人员列表,防止用户未登录就访问主页面。
后台主要实现上述的业务逻辑功能。
遇到的问题及解决方案:
- 在本地进行完成测试之后,一开始部署到局域网上之后让室友帮忙测试发现注册功能出现问题,看了报错发现是MySQL的访问权限问题,之后我把mysql数据库的user表的root账户的Host改为%,原本是localhost,意思是所有用户都可以访问,原先是本机才能访问。
- 后来发现其实我在本机上注册的时候也会出现bug,进一步debug之后发现我在实现防止用户名重复的时候查询完数据库之后忘记判空了,判空之后bug就消失了!
-
部署到局域网,在部署项目的Tomcat里头有个server.xml,找到Host标签,把name改为自己的IP地址,如果IP经常变换,也可以改为0.0.0.0
-
每次输入项目名感觉有点繁琐,在部署项目的Tomcat里头有个server.xml,找到Context标签,把path里头的项目名去掉就可以了,默认8080端口访问此项目
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/152171.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...