基于JSP+Servlet+Tomcat8.5+WebSocket实现的网页聊天室

基于JSP+Servlet+Tomcat8.5+WebSocket实现的网页聊天室

在这里插入图片描述

一、准备好开发环境

注意:(Tomcat的版本最好是7.0以上,由于这是基于Tomcat内部集成的Websocket开发的网页聊天室,就不需要导入Websocket jar包了,如果是基于SpingMVC或者SpingBoot的开发的就需要在Pom.xml的文件中导入相应的依赖)

1.1、创建工程目录

在这里插入图片描述

1.2、导入本项目中相应的 jar包

在这里插入图片描述

1.3、导入相应的静态资源页面

1)、导入login.jsp登录页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>欢迎登陆迷你聊天室</title>
<script type="text/javascript" src="jquery-3.5.1.min.js"></script>
<style type="text/css">
	tr{
   
		height: 40px;
		line-height: 40px;
	}
	
	div{
   
		position: relative;
	}
	
	span {
   
		position: absolute;
		bottom: 0;
		right: 0;
		font-size: 12px;
		margin-bottom: 10px;
		margin-right: 6px;
	}
}
	
</style>
</head>
<body style="background-color: #666;">
	<div style="margin: 80px auto;width: 500px;text-align: center;border: 1px solid #ccc;border-radius: 15px;box-shadow: 10px 10px 5px #ccc;background-color: white;">
		<h1>欢迎登陆迷你聊天室</h1>
		<form action="login" method="get">
			<table style="margin: auto;">
				<tr>
					<td>用户名: </td>
					<td><input type="text" name="username" placeholder="请输入用户名..."/></td>
				</tr>
				<tr>
					<td>密码: </td>
					<td><input type="password" name="password" placeholder="请输入密码..."/></td>
				</tr>
				<tr>
					<td colspan="2">
						<input type="submit" value="登录"/>
						<input type="reset" value="重置"/>
					</td>
				</tr>
			</table>
		</form>
		<a style="margin-bottom: 15px;display: block;" href="./register.jsp">注册</a>
		<span style="position: absolute; top: 70px;right: 35%;color: red;">${
   error}</span>
		<span>作者: @未进化的程序猿</span>
	</div>
</body>
</html>
2)、导入register.jsp注册页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>欢迎注册迷你聊天室</title>
<style type="text/css">
	tr{
   
		height: 40px;
		line-height: 40px;
	}
	
	div{
   
		position: relative;
	}
	
	span {
   
		position: absolute;
		bottom: 0;
		right: 0;
		font-size: 12px;
		margin-bottom: 10px;
		margin-right: 6px;
	}
}
	
</style>
</head>
<body style="background-color: #666;">
	<div style="margin: 80px auto;width: 500px;text-align: center;border: 1px solid #ccc;border-radius: 15px;box-shadow: 10px 10px 5px #ccc;background-color: white;">
		<h1>欢迎注册迷你聊天室</h1>
		<form action="registerHandler" method="get">
			<table style="margin: auto;">
				<tr>
					<td>用户名: </td>
					<td><input type="text" name="username" placeholder="请输入用户名..."/></td>
				</tr>
				<tr>
					<td>密码: </td>
					<td><input type="password" name="password" placeholder="请输入密码..."/></td>
				</tr>
				<tr>
					<td colspan="2">
						<input type="submit" value="注册"/>
						<input type="reset" value="重置"/>
					</td>
				</tr>
			</table>
		</form>
		<a style="margin-bottom: 15px;display: block;" href="./index.jsp">登录</a>
		<span style="position: absolute; top: 70px;right: 35%;color: red;">${
   error}</span>
		<span>作者: @未进化的程序猿</span>
	</div>
</body>
</html>
3)、导入websocketChatroom.jsp聊天页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${
   sessionScope.username}</title>
<script type="text/javascript" src="jquery-3.5.1.min.js"></script>

<script type="text/javascript">
	//1、定义websocket对象
	var ws;
	//2、设置连接websocket的URL
	var ws_url = "ws://47.95.113.235:8080/chartroom-websocket/websocket/chatroom"
	//3、定义json对象
	var msg;
	$(function() {
   
		//调用连接websocket的方法
		ws_connect();
		//点击按钮发送消息的方法事件
		$("#send").click(function () {
   
			ws_sendMsg();
			scrollToBottom();
		});
		//绑定双击事件,给每一个列表绑定事件
		$("body").on("dblclick",".userName",function(){
   
			var loginName = '${sessionScope.username}';
			//获取列表的用户的名称
			var userName = $(this).attr("id");
			
			if(loginName == userName){
   
                alert("不能跟自己聊天!!!");
                return;
            }
			
			//将获取的用户的名称填充到文本输入框中
			$("#msg").val("@" + userName + ":");
		});
		
		//给点击发送图片按钮绑定点击事件
		$("#uploadImg").on("click",function(){
   
			ws_sendImg();
			scrollToBottom();
		});
		//给button按钮加回车事件
		$("body").keydown(function () {
   
	        if (event.keyCode == "13") {
   //keyCode=13是回车键
	        	$('#send').click();//换成按钮的id即可
	        }
	    });
	});
	//websocket连接的方法
	function ws_connect() {
   
		//获取登陆进来的用户名
		var loginName = '${sessionScope.username}';
		//打印输出效果
		console.log('loginName: ['  + loginName + ']');
		if ('WebSocket' in window) {
   
			ws = new WebSocket(ws_url + "?loginName=" + loginName);
        } else if ('MozWebSocket' in window) {
   
        	ws = new MozWebSocket(ws_url + "?loginName=" + loginName);
        } else {
   
            Console.log('Error: WebSocket is not supported by this browser.');
            return;
        }

		ws.onopen = function () {
   
            console.log('Info: WebSocket connection opened.');
        };

        ws.onclose = function () {
   
            console.log('Info: WebSocket closed.');
        };
		//接收后台传过来的信息
        ws.onmessage = function (message) {
   
            console.log(message.data);
            
            //判断message.data是文本消息还是文件消息
            if("string" == typeof(message.data)){
   
            	//表示文本消息
            	//获取当前表格内有多少行
                var rows = $("#record").find("tr").length;
                //定义初始值的颜色为黑色
                var colorMsg = "black";
                //判断行数对2取余是否等于0
                if(rows % 2 == 0){
   
                	//颜色为绿色
                	colorMsg = "green";
                }
                
                //1、获取返回响应消息的聊天内容
                var getMsgContent = message.data;
                //将json字符串转变成JSON对象
                msg = JSON.parse(getMsgContent);
                //2、拼接html字符串,显示消息体
                var html = "<tr style='float:left;clear: both;margin-left:40%;'><td style='color:red;'>"+ msg.msgInfo +"</td></tr>";
                //判断消息是系统消息,还是用户消息
                if(msg.msgType == "System"){
   
                	//表示系统消息
                	//3、追加到table中
                    $("#record").append(html);
                	
                 	//定义初始值的颜色为黑色
                    var colorUserListMsg = "black";
                   
                	
   
  • 2
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
实现基于 WebSocket聊天单聊和群聊,可以分为以下几个步骤: 1. 创建 SpringBoot 项目:使用 SpringBoot 创建一个后端项目,添加 WebSocket 依赖。 2. 配置 WebSocket:在 SpringBoot 项目中添加配置类,开启 WebSocket 支持,并注册 WebSocket 处理器。 3. 创建前端项目:使用 Vue 创建一个前端项目,安装 WebSocket 库。 4. 实现单聊和群聊功能:前端和后端通过 WebSocket 进行通信,前端发送消息到后端,后端将收到的消息进行处理,然后再将消息发送给前端。 下面是一个简单的示例代码: 后端代码: 1. 添加 WebSocket 依赖 ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> ``` 2. WebSocket 配置类 ``` @Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(new WebSocketHandler(), "/ws").setAllowedOrigins("*"); } } ``` 3. WebSocket 处理器 ``` @Component public class WebSocketHandler extends TextWebSocketHandler { private static final Map<String, WebSocketSession> sessions = new ConcurrentHashMap<>(); @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { sessions.put(session.getId(), session); } @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception { sessions.remove(session.getId()); } @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { // 处理收到的消息 String payload = message.getPayload(); JSONObject jsonObject = JSONObject.parseObject(payload); String type = jsonObject.getString("type"); String content = jsonObject.getString("content"); String from = jsonObject.getString("from"); String to = jsonObject.getString("to"); if("chat".equals(type)) { // 单聊 WebSocketSession toSession = sessions.get(to); if(toSession != null && toSession.isOpen()) { TextMessage textMessage = new TextMessage(content); toSession.sendMessage(textMessage); } } else if("group".equals(type)) { // 群聊 for(WebSocketSession session1 : sessions.values()) { if(session1.isOpen()) { TextMessage textMessage = new TextMessage(content); session1.sendMessage(textMessage); } } } } } ``` 前端代码: 1. 安装 WebSocket 库 ``` npm install --save sockjs-client npm install --save stompjs ``` 2. 连接 WebSocket ``` import SockJS from 'sockjs-client' import Stomp from 'stompjs' let stompClient = null; function connect() { const socket = new SockJS('/ws'); stompClient = Stomp.over(socket); stompClient.connect({}, function (frame) { console.log('Connected: ' + frame); stompClient.subscribe('/topic/chat', function (message) { // 接收到消息 console.log(message); }); }); } connect(); ``` 3. 发送消息 ``` function sendChatMessage() { const message = { type: 'chat', content: 'hello', from: 'user1', to: 'user2' }; stompClient.send('/app/chat', {}, JSON.stringify(message)); } ``` 以上代码仅为示例,具体实现还需要根据具体需求进行修改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值