吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 11589|回复: 54
收起左侧

[Java 转载] 我的聊天室(源码)

  [复制链接]
meilon 发表于 2017-8-23 23:37
本帖最后由 meilon 于 2019-1-20 13:06 编辑

前几天就看到有人问聊天室, 就是一直没什么空, 这两天刚好没事, 就抽空做了一个.
研究websocket没几天, 做的一般.

2017-8-24: 昨天做完也没细测, 今天一看好多BUG...
于是做了一些修改 :
隐藏了聊天窗口的滚动条;
添加了退出聊天室按钮;
添加了回车键发送消息的功能;
消息框在发送消息后会自动重获焦点;
修复了异常退出导致昵称一直被占用的BUG;

修复了按回车键登陆连接错误的问题;
修复了不会自动下滚的BUG.

2017-8-26:感谢6767朋友的提醒
增加了xss过滤

基于websocket 后台java 制作.
废话不多说, 看图 tu.png

这是核心代码, 版面所限, 剩下的就不放了, 想研究的请下源码.
[Java] 纯文本查看 复制代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
String userName = (String)session.getAttribute("userName");

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>Mysocket</title>
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">    
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="This is my page">
        <!--
        <link rel="stylesheet" type="text/css" href="styles.css">
        -->
<link rel="stylesheet" type="text/css" href="css/style.css"/>
<script src="js/jquery.js"></script>
<script type="text/javascript" >

var ur = window.location.host;
var websocket = null;
var myName = "${userName}";
//判断当前浏览器是否支持WebSocket
if ('WebSocket' in window) {
   websocket = new WebSocket("ws://"+ur+"/chat/chatRoom/${userName}");
} else {
   alert('您的浏览器不支持 websocket')
}
//连接发生错误的回调方法
websocket.onerror = function() {
   showMessage("发生错误!");
};
//连接成功建立的回调方法
websocket.onopen = function() {
   showMessage("连接成功!");
}
//连接关闭的回调方法
websocket.onclose = function() {
   showMessage("连接已关闭!");
}
//关闭窗口时,自动断开websocket连接,server端会抛异常。
window.onbeforeunload = function() {
   websocket.close();
}
//接收到消息的回调方法
websocket.onmessage = function(event) {
   var data = JSON.parse(event.data);
   var content;
   if(data.sender=="system"){
      content = "<span class='red'>系统 : " + data.content + "</span>";
   }else if(data.recipient == myName){
      content = "<span class='blue'>" + data.sender + " > 我 : " + data.content + "</span>";
   }else if(data.recipient == "all"){
      content = data.sender + " > 所有人 : " + data.content;
   }else{
      content ="<span class='blue'>" + data.sender + " > " + data.recipient + " : " + data.content + "</span>";
   }
   showMessage(content);
   if(data.type == "updateList"){
      userList(data.userList);
   }
}
//将消息显示在网页上
function showMessage(content) {
   $("#message").append("<p>" + content + "</p>");
   document.getElementById('message').scrollTop = document.getElementById('message').scrollHeight;
} 
//发送消息
function sendMessage() {
   var text = $('#text').val();
   if(text != ""){
           websocket.send(text);
           $('#text').val("");
   }
   $("#text").focus();
}
//绘制在线列表
function userList(list){
        $("#user").empty();
        for(var i in list){
           $("#user").append("<li>" + list + "</li>");
        }        
}
//关闭连接
function closeWebSocket() {
    websocket.close();
          window.location = "index.html";
}
//回车键发送消息
$(window).keydown(function(event){
        if(event.keyCode == 13) {
                //阻止回车键默认行为
                event.preventDefault();
                sendMessage();
        }
});

</script> 
</head>  
<body>
        <div id="main" class="clearfix">
                <div id="chat">
                        <div id="message" ></div>
                        <textarea id="text"></textarea>
                        <span class="grey"> @昵称+空格+消息内容(给指定用户发送消息)</span>
                        <span class="right">
                                <button class="button">离开聊天室</button>
                                       
                                <button class="button">发送(Enter)</button>
                        </span>
                </div>
                <div id="list">
                        <h4>在线人员</h4>
                        <ul id="user"> </ul>
                </div>
   </div>
  </body>
  
</html>



chat_1.2.zip (858.52 KB, 下载次数: 438)

免费评分

参与人数 12吾爱币 +11 热心值 +9 收起 理由
lamorn + 1 我很赞同!
Luizhen + 1 热心回复!
tian19970206 + 1 + 1 谢谢@Thanks!
307921917 + 1 不能发送截图和文件,还是很鸡肋,望楼主能更新
521lht + 1 + 1 我很赞同!
尾叶 + 1 + 1 谢谢@Thanks!
Azure_atk + 1 + 1 谢谢@Thanks!
jianailing + 1 + 1 用心讨论,共获提升!
YW大乖乖 + 1 + 1 我拿去玩了,谢谢
L浪子 + 1 谢谢@Thanks!
as501226107 + 1 + 1 这是我一直想做的东西,谢谢楼主了。我找了很久都没有找到相关的概念知识,.
主骑士 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

6767 发表于 2017-8-26 09:25
提醒一下,这个还有xss的隐患
mylure 发表于 2018-2-12 16:25
本帖最后由 mylure 于 2018-2-12 16:28 编辑

为啥我的源码放云服务器里访问是403错误呢?楼主帮帮忙。
Forbidden

You don't have permission to access /chat/ on this server.
Additionally, a 403 Forbidden error was encountered while trying to use an ErrorDocument to handle the request.

Apache/2.4.18 Server at 114.67.231.155 Port 80
bailei 发表于 2017-8-24 00:10
夭折啦~ 聊天室居然有人直播开车  送豆腐的来了~
矢泽妮可 发表于 2017-8-24 00:18
一群老司机
温文尔雅genuine 发表于 2017-8-24 00:25 来自手机
66666666636666666

免费评分

参与人数 1吾爱币 -3 收起 理由
wushaominkk -3 请勿灌水,提高回帖质量是每位会员应尽的义务!

查看全部评分

molly9042 发表于 2017-8-24 00:28 来自手机
先收藏,谢谢楼主啦
张道陵 发表于 2017-8-24 00:31
这么简洁的聊天室,局域网的吗?
主骑士 发表于 2017-8-24 00:39
6666666666666666666666,谢谢楼主的分享
献上评分
头像被屏蔽
小米虫 发表于 2017-8-24 01:59
提示: 作者被禁止或删除 内容自动屏蔽
头像被屏蔽
gowupu 发表于 2017-8-24 05:48
提示: 作者被禁止或删除 内容自动屏蔽
钝刀割喉 发表于 2017-8-24 07:07
营养跟不上了,别开车
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-26 01:12

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表