基于HTML5和Tomcat WebSocketServlet的聊天室简单实现

HTML5基于Tomcat 7.0实现WebSocket连接并实现简单的实时聊天 1、什么是WebSocket? WebSocket 是一种自然的全双工、双向、单套接字连接。使用WebSocket,你的HTTP 请求变成打开WebSocket 连接(WebSocket 或者WebSocket over TLS(TransportLayer Security,传输层安全性,原称“SSL”))的单一请求,并且重用从客户端到服务器以及服务器到客户端的同一连接。WebSocket 减少 阅读详情

 

index.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"  
    pageEncoding="UTF-8"%>  
<%  
    String path = request.getContextPath();  
    String WsBasePath = "ws://" + request.getServerName() + ":"  
            + request.getServerPort() + path + "/";  
%>  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>websocket聊天室</title>  
<style type="text/css">  
#chat {  
    text-align: left;  
    width: 600px;  
    height: 500px;  
    width: 600px;  
}  
  
#up {  
    text-align: left;  
    width: 100%;  
    height: 400px;  
    border: 1px solid green;  
    OVERFLOW-Y: auto;  
}  
  
#down {  
    text-align: left;  
    height: 100px;  
    width: 100%;  
}  
</style>  
</head>  
<body>  
    <h2 align="center">基于HTML5的聊天室</h2>  
    <div align="center" style="width: 100%; height: 700px;">  
        <div id="chat">  
            <div id="up"></div>  
            <div id="down">  
                <textarea style="width: 602px; height: 100%;" id="send"></textarea>  
            </div>  
        </div>  
        <br/>  
        <input type="button" value="连接" onclick="chat(this);"> <input  
            type="button" value="发送" onclick="send(this);" disabled="disabled"  
            id="send_btn" title="Ctrl+Enter发送">  
    </div>  
</body>  
<script type="text/javascript">  
    var socket;  
    var receive_text = document.getElementById("up");  
    var send_text = document.getElementById("send");  
    function addText(msg) {  
        receive_text.innerHTML += "<br/>" + msg;  
        receive_text.scrollTop = receive_text.scrollHeight;  
    }  
    var chat = function(obj) {  
        obj.disabled = "disabled";  
        try{  
            socket = new WebSocket('<%=WsBasePath + "chat"%>');  
            receive_text.innerHTML += "<font color=green>正在连接服务器……</font>";  
        }catch(e){  
            receive_text.innerHTML += "<font color=red>抱歉,您的浏览器不支持html5,请使用IE10或者最新版本的谷歌、火狐等浏览器!</font>";  
        }  
        //打开Socket   
        socket.onopen = function(event) {  
            falg=false;  
            addText("<font color=green>连接成功!</font>");  
            document.getElementById("send_btn").disabled = false;  
            send_text.focus();  
            document.onkeydown = function(event) {  
                if (event.keyCode == 13 && event.ctrlKey) {  
                    send();  
                }  
            };  
        };  
        socket.onmessage = function(event) {  
            addText(event.data);  
        };  
  
        socket.onclose = function(event) {  
            addText("<font color=red>连接断开!</font>");  
            obj.disabled = "";  
        };  
    };  
    var send = function(obj) {  
        if (send_text.value == "") {  
            return;  
        }  
        socket.send(send_text.value);  
        send_text.value = "";  
        send_text.focus();  
    };  
</script>  
</html>


 

ChatWebSocketServlet.java

 

    package com.baiyang.lc.websocketservlet;  
      
    import java.io.IOException;  
    import java.nio.ByteBuffer;  
    import java.nio.CharBuffer;  
    import java.text.SimpleDateFormat;  
    import java.util.Date;  
    import java.util.HashMap;  
    import java.util.Map;  
    import java.util.Set;  
      
    import javax.servlet.annotation.WebServlet;  
    import javax.servlet.http.HttpServletRequest;  
      
    import org.apache.catalina.websocket.MessageInbound;  
    import org.apache.catalina.websocket.StreamInbound;  
    import org.apache.catalina.websocket.WebSocketServlet;  
    import org.apache.catalina.websocket.WsOutbound;  
      
    @WebServlet("/chat")  
    public class ChatWebSocketServlet extends WebSocketServlet {  
        private final Map<Integer, WsOutbound> map = new HashMap<Integer, WsOutbound>();  
      
        /** 
         *  
         */  
        private static final long serialVersionUID = -1058445282919079067L;  
      
        @Override  
        protected StreamInbound createWebSocketInbound(String arg0, HttpServletRequest request) {  
            return new ChatMessageInbound();  
        }  
      
        class ChatMessageInbound extends MessageInbound {  
      
            @Override  
            protected void onOpen(WsOutbound outbound) {  
                map.put(outbound.hashCode(), outbound);  
                super.onOpen(outbound);  
            }  
      
            @Override  
            protected void onClose(int status) {  
                map.remove(getWsOutbound().hashCode());  
                super.onClose(status);  
            }  
      
            @Override  
            protected void onBinaryMessage(ByteBuffer buffer) throws IOException {  
                // TODO Auto-generated method stub  
      
            }  
      
            @Override  
            protected void onTextMessage(CharBuffer buffer) throws IOException {  
                String msg = buffer.toString();  
                Date date = new Date();  
                SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");  
                msg = " <font color=green>匿名用户  " + sdf.format(date) + "</font><br/> " + msg;  
                broadcast(msg);  
            }  
      
            private void broadcast(String msg) {  
                Set<Integer> set = map.keySet();  
                for (Integer integer : set) {  
                    WsOutbound outbound = map.get(integer);  
                    CharBuffer buffer = CharBuffer.wrap(msg);  
                    try {  
                        outbound.writeTextMessage(buffer);  
                        outbound.flush();  
                    } catch (IOException e) {  
                        e.printStackTrace();  
                    }  
                }  
            }  
        }  
    }  


 

--简单聊天室源代码-- --简单聊天室源代码-- --简单聊天室源代码-- 立即下载

相关推荐

基于Netty+SpringBoot+WebSocket+HTML5+制作的仿微信聊天APP,该仓库为后端系统+源代码+文档说明

## 功能说明 聊天界面能够保存最近聊天的好友及快照。 通讯录界面提供按A-Z的数组排列和查找。 发现界面提供朋友圈、添加好友和扫一扫功能。可以通过扫一扫添加好友。 个人界面提供头像修改、昵称修改等功能。 使用个推进行APP端消息的推送,使用前后端心跳保持WebSocket连接。 ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

环信IM(PC-WEB端整体实现)

主搞后端开发,前端技术不是很6,望大神勿喷!环信官网的web-im api是一个巨坑,前端兄弟一脸懵逼,无奈只能帮前端兄弟写这个demo,一阵心酸和泪水~~~~完整的资源下载地址:点击下载片段如下:(只提供思路和基本demo,请勿喷代码风格和洁癖,毕竟我只是帮忙搞这个。。。。)&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional/...

点滴记录 6849

CTF密码学奇技淫巧:当Base64遇到ROT13与Atbash

本文深入解析CTF竞赛中Base64、ROT13与Atbash的复合编码技术,提供Python实现与CyberChef可视化处理方案,帮助选手掌握密码学题目的解题技巧。通过NewStarCTF2025实战案例,对比脚本化与可视化工具的优劣,提升Web安全竞赛中的编码处理能力。

weixin_29001683的博客 508

HTML5和Tomcat7 WebSocketServlet easyui的聊天室简单实现

不多说了,看下代码和效果 可以指定好友发送消息,也可群聊

1789

Win11+Ubuntu18.04+Ubuntu20.04三系统安装与卸载

以下情况均为个人情况:1.插入启动 U 盘后,登录时可以按F12(拯救者Y7000,不同电脑不同)进入BIOS,选择从启动盘启动。2.。3.5.在win基础上,安装第一个Ubuntu系统后,系统启动界面类似如下第一张图,Ubuntu不显示版本号。安装第二个Ubuntu系统后,系统启动界面如下第二张图,如果想更改启动项的名称,可自行查阅相关资料。

weixin_61686291的博客 2537

解锁SPWM电压利用率:三次谐波注入幅值的黄金分割点

本文深入探讨了SPWM电压利用率的提升方法,重点介绍了三次谐波注入技术及其黄金分割点(1/6比例)。通过数学推导和工程实践,揭示了如何通过特定幅值的三次谐波注入将电压利用率从86.6%提升至115%,与SVPWM相当。文章还提供了实验室调试流程和DSP实现代码,帮助工程师优化逆变器设计。

weixin_30729609的博客 915

Tomcat学习总结(4)——基于Tomcat7、Java、WebSocket的服务器推送聊天室

前言 HTML5 WebSocket实现了服务器与浏览器的双向通讯,双向通讯使服务器消息推送开发更加简单,最常见的就是即时通讯和对信息实时性要求比较高的应用。以前的服务器消息推送大部分采用的都是“轮询”和“长连接”技术,这两中技术都会对服务器产生相当大的开销,而且实时性不是特别高。WebSocket技术对只会产生很小的开销,并且实时性特别高。下面就开始讲解如何利用We...

weixin_34026276的博客 97

跨阻放大器(TIA)的输入输出阻抗的定义、分析和影响因素

跨阻放大器(Transimpedance Amplifier,简称TIA)是一种常用于将电流信号转换为电压信号的放大器。在TIA电路中,输入阻抗是指输入端对电流信号的响应能力,输出阻抗是指输出端对负载电阻的驱动能力。本文将分别介绍TIA的输入和输出阻抗的定义、分析以及影响因素。

weixin_44378594的博客 1万+

基于WebSocket的服务器推送的JAVA聊天室

前言         HTML5 WebSocket实现了服务器与浏览器的双向通讯,双向通讯使服务器消息推送开发更加简单,最常见的就是即时通讯和对信息实时性要求比较高的应用。以前的服务器消息推送大部分采用的都是“轮询”和“长连接”技术,这两中技术都会对服务器产生相当大的开销,而且实时性不是特别高。WebSocket技术对只会产生很小的开销,并且实时性特别高。下面就开始讲解如何利用

wendysunday123的专栏 687

ABP框架实战:从零搭建多租户应用(含完整代码示例)

本文详细介绍了如何使用ABP框架从零构建多租户SaaS应用,涵盖多租户架构设计、数据隔离实现、租户管理及性能优化等核心内容。通过完整的代码示例,帮助开发者快速掌握企业级数据隔离系统的开发技巧,提升SaaS应用开发效率。

weixin_29247219的博客 263

吉林大学软件工程章节测验 第九章 答案+解析

4.【判断题】估算软件规模有代码行技术和功能点技术两种方法,其中代码行方法估计实现一个功能所需要的源程序行数,其不依赖项目所使用的开发语言,并且具有较好的直观性。3.【单选题】软件项目估算时,若计划人员对每个功能分别按最佳的、可能的、悲观的三种情况给出功能点估计值,记作a, m, b,则估算的期望值E的公式为( )。8.【判断题】在工程网络图中,如果在由起始事件至终止事件所构成的一条路径上,所有事件的最早时刻都和最迟时刻都相同,那么这条路径就是关键路径。4.【单选题】配置管理贯穿软件开发的整个过程。

m0_51459931的博客 1430

tomcat服务器的消息推送,基于Tomcat7、Java、WebSocket的服务器推送聊天室实例.pdf

基基于于Tomcat7、、Java、、WebSocket的的服服务务器器推推送送聊聊天天室室实实例例前前言言HT ML5 WebSocket实现了服务器与浏览器的双向通讯,双向通讯使服务器消息推送开发 加简单,最常见的就是即时通讯和对信息实时性要求比较高的应用。以前的服务器消息推送大部分采用的都是“轮询”和“长连接”技术,这两中技术都会对服务器产生相当大的开销,而且实时性不是特别高。WebSock...

weixin_42345187的博客 382

Bert+CNN文本分类(含代码实现)

一、什么是CNN? CNN的特点: (1)特定特征位移不变性 (2)特征缩放不变性 2. CNN模型构造过程 2.1 Convolution(卷积) (1)获取关键特征(减少参数) (2)共享权重(再次减少参数) 2.2 Max Pooling(池化) 2.3 Flatten 向量转换为如图所示可以进入全连接层的向量模式 3. TextCNN 上图可理解为: 通过不同的size(如上图2、3、4等),上图红色代表 size=2,黄色...

Python,数据分析,机器学习,深度学习 1万+

基于Tomcat7、Java、WebSocket的服务器推送聊天室项目

HTML5 WebSocket实现了服务器与浏览器的双向通讯,双向通讯使服务器消息推送开发更加简单,最常见的就是即时通讯和对信息实时性要求比较高的应用。以前的服务器消息推送大部分采用的都是“轮询”和“长连接”技术,这两中技术都会对服务器产生相当大的开销,而且实时性不是特别高。WebSocket技术对只会产生很小的开销,并且实时性特别高。下面就开始讲解如何利用WebSocket技术开发聊天室。在这个

clyao_123456的专栏 775

Python爬虫:爬取拼多多平台商品信息、销量、价格等数据

在本篇博客中,我们将深入探讨如何使用Python爬虫技术爬取拼多多平台的商品信息,包括商品的标题、销量、价格等详细数据。拼多多的商品页面通常是分页展示的,因此我们需要遍历多个页面,获取所有商品的信息。每个商品在拼多多平台上都有一个唯一的商品ID,我们可以通过该ID访问商品页面。通过以上的技术方案和代码示例,你已经掌握了如何使用Python爬虫获取拼多多平台上的商品信息、销量、价格等数据。等技术,解决拼多多平台的反爬虫机制,成功抓取我们所需的商品数据。,我们能够应对拼多多的反爬虫机制,稳定地获取到商品数据。

2201_76125261的博客 3655

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

基于Tomcat7、Java、WebSocket的服务器推送聊天室

前言        HTML5 WebSocket实现了服务器与浏览器的双向通讯,双向通讯使服务器消息推送开发更加简单,最常见的就是即时通讯和对信息实时性要求比较高的应用。以前的服务器消息推送大部分采用的都是“轮询”和“长连接”技术,这两中技术都会对服务器产生相当大的开销,而且实时性不是特别高。WebSocket技术对只会产生很小的开销,并且实时性特别高。下面就开始讲解如何利用WebSocket技

洗尽铅华 5万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

WebSocket聊天室

WebSocket聊天室 HTML5 WebSocket实现了服务器与浏览器的双向通讯,双向通讯使服务器消息推送开发更加简单,最常见的就是即时通讯和对信息实时性要求比较高的应用。以前的服务器消息推送大部分采用的都是“轮询”和“长连接”技术,这两中技术都会对服务器产生相当大的开销,而且实时性不是特别高。WebSocket技术对只会产生很小的开销,并且实时性特别高。下面就开始讲解如何

bestlove12345的博客 4355

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

基于Tomcat7、Java、WebSocket的服务器推送聊天室 .

前言           HTML5 WebSocket实现了服务器与浏览器的双向通讯,双向通讯使服务器消息推送开发更加简单,最常见的就是即时通讯和对信息实时性要求比较高的应用。以前的服务器消息推送大部分采用的都是“轮询”和“长连接”技术,这两中技术都会对服务器产生相当大的开销,而且实时性不是特别高。WebSocket技术对只会产生很小的开销,并且实时性特别高。下面就开始讲解如何利用Web...

iteye_4972的博客 210

基于Tomcat7、Java、WebSocket的服务器推送技术之聊天室

前言 HTML5 WebSocket实现了服务器与浏览器的双向通讯,双向通讯使服务器消息推送开发更加简单,最常见的就是即时通讯和对信息实时性要求比较高的应用。以前的服务器消息推送大部分采用的都是“轮询”和“长连接”技术,这两中技术都会对服务器产生相当大的开销,而且实时性不是特别高。WebSocket技术对只会产生很小的开销,并且实时性特别高。下面就开始讲解如何利用WebSocket技...

weixin_30836759的博客 80
上一篇: Jquery Json Cookie Demo
下一篇: c:forEach 遍历集合中的元素,判断是否是最后一个元素
Johnny__Tang
博客等级 码龄18年 9粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值