ajax實現簡單的多人聊天
原理:簡單來說就是利用ajax的非同步,ajax每隔一段時間會從後臺獲取資料而不重新整理頁面。
步驟:1。資料庫裡建兩張表,一張使用者表,一張訊息表
isGet表示訊息是否被讀
2.使用java web做後臺,主要使用hibernate和struts2框架,xml資料格式。
3.下面給出核心jsp程式碼:
friend.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'firend.jsp' starting page</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">
-->
<script type="text/javascript" src="my.js"></script>
<script type="text/javascript">
function change1(val,obj){
if(val=='over'){
obj.style.color='red';
obj.style.cursor='hand';
}
else if(val=='out'){
obj.style.color='black';
}
}
function openChatRoom(obj){
window.open("${pageContext.request.contextPath}/chat/friend_gotochat.action?username="+encodeURI(obj.innerText),"_blank");
}
</script>
</head>
<body>
<h1>歡迎${user.username }</h1>
<ul>
<c:forEach items="${list}" var="everyuser">
<li onmouseover="change1('over',this)" onclick="openChatRoom(this)"
onmouseout="change1('out',this)">${everyuser.username }</li>
</c:forEach>
</ul>
</body>
</html>
以上程式碼的功能只是實現當用戶點選好友列表的某個好友時,瀏覽器開啟一個新的聊天介面
chating.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'chating.jsp' starting page</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">
-->
<script type="text/javascript" src="my.js"></script>
<script type="text/javascript">
//開啟新視窗的大小
window.resizeTo(700,400);
//每隔5秒向後臺要資料
window.setInterval("getMessage()",5000);
//向後臺要資料的函式
function getMessage(){
var myXmlHttpRequest=getXmlHttpObject();
if(myXmlHttpRequest){
var url="${pageContext.request.contextPath}/chat/chat_backchat.action";
var data="getterid="+'${user.id }'+"&senderid="+'${usertochat.id}';
myXmlHttpRequest.open("post",url,true);
myXmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
myXmlHttpRequest.onreadystatechange=function (){
if(myXmlHttpRequest.readyState==4){
if(myXmlHttpRequest.status==200){
//當資料回來後,將資料顯示在指定位置
var meses=myXmlHttpRequest.responseXML;
var contents=meses.getElementsByTagName("content");
var sendtimes=meses.getElementsByTagName("sendtime");
for(var i=0;i<contents.length;i++){
var str='${usertochat.username }'+":"+contents[i].childNodes[0].nodeValue+"\r\n"+sendtimes[i].childNodes[0].nodeValue
$('mycons').value+=str+"\r\n";
}
}
}
}
myXmlHttpRequest.send(data);
}
}
//傳送資料的函式
function sendmessage(){
var myXmlHttpRequest=getXmlHttpObject();
if(myXmlHttpRequest){
var url="${pageContext.request.contextPath}/chat/chat_gochat.action";
var data="con="+${'con'}.value+"&getterid="+'${usertochat.id}'+"&senderid="+'${user.id }';
//window.alert(data);
myXmlHttpRequest.open("post",url,true);
myXmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
myXmlHttpRequest.onreadystatechange=function (){
if(myXmlHttpRequest.readyState==4){
if(myXmlHttpRequest.status==200){
}
}
}
myXmlHttpRequest.send(data);
$('mycons').value+='${user.username }'+":"+$('con').value+"\r\n"+new Date().toLocaleString()+"\r\n";
$('con').value="";
}
}
</script>
</head>
<body>
<h1>聊天室,<font color="red">${user.username }</font>正在和<font color="red">${usertochat.username }</font>聊天</h1>
<textarea cols="70" rows="10" id="mycons"></textarea><br/>
<input type="text" id="con" style="width:400px"/>
<input type="button" value="傳送訊息" onclick="sendmessage()"/>
</body>
</html>
my.js:
//建立ajax
function getXmlHttpObject(){
var xmlHttpRequest;
//XmlHttpObject
if(window.ActiveXObject)
{
//window.alert("ie");
xmlHttpRequest=new ActiveXObject("Microsoft.XMLHTTP");
}
else{
//window.alert("ff");
xmlHttpRequest=new XmlHttpRequest();
}
return xmlHttpRequest;
}
//獲取id
function $(id){
return document.getElementById(id);
}
//encode"+","&"(對加號和空格編碼)
function URLencode(sStr)
{
return escape(sStr).replace(/\+/g, '%2B').replace(/\"/g,'%22').replace(/\'/g, '%27').replace(/\//g,'%2F');
}
相關推薦
Java通過Socket來實現簡單多人聊天室
Socket可以實現網路上兩個程式通過雙向通道進行資料的交換,此外它是Java中網路TCP/IP協議的封裝,例如可以進行網路通訊等等,下面我們就來簡單寫一下多人聊天室。 首先來分析一下要實現的流程 首先建立一個伺服器端,構建ServerSocket並繫結埠 建立sock
使用UDP實現簡單多人聊天功能
使用UDP實現簡單聊天功能 使用UDP實現一個簡單的多人聊天功能。該程式使用了多執行緒,實現了聊天功能。 package 課後作業.E103_10_聊天; import java.io.IOException; import java.net.*; i
nio 代碼實現簡易多人聊天
false size spl closed write content 輸入 utf oom 這幾天在學習nio相關知識。實現了一個簡單的多人聊天程序。 服務端代碼; 1 import java.io.IOException; 2 import java.net
【181027】VC++簡單多人聊天室原始碼
一個簡單的但支援多人同時聊天的VC++聊天室原始碼,支援私聊、支援真實IP相互傳送檔案,使用者名稱可以重複,當用戶進入聊天室時其它使用者會得到通知,伺服器端採用埠模型完成,客戶端採用WSAAynscSelect模型,底層採用xml對傳輸協議進行封裝。伺服器啟動後自動監聽客戶端是否執行,聊天過程中
使用netty實現一個多人聊天室--failed: Error during WebSocket handshake: Unexpected response code: 200
初次接觸netty , 本文主要內容如下: 遇到的小bug 聊天室後端程式碼: 聊天室前端程式碼: 遇到的小bug 在使用netty進行websocket程式設計(實現一個簡單的聊天室)時,我遇到了這樣一個奇怪
PHP實現單人多人聊天原始碼免費分享 | 電腦報修系統
原始碼清單 1. 簡易版登陸式聊天原始碼。 2. 電腦報修輕系統原始碼。 3. 關注下面公眾號回覆“聊天”,免費獲取。
Python基於Socket實現簡易多人聊天室
##前言 套接字(Sockets)是雙向通訊通道的端點。 套接字可以在一個程序內,在同一機器上的程序之間,或者在不同主機的程序之間進行通訊,主機可以是任何一臺有連線網際網路的機器。 套接字可以通過多種不同的通道型別實現:Unix域套接字,TCP,UDP等。 套接字型檔提供了處理公共傳輸的特定類,以及一個用於處
ajax實現簡單的多人聊天
原理:簡單來說就是利用ajax的非同步,ajax每隔一段時間會從後臺獲取資料而不重新整理頁面。 步驟:1。資料庫裡建兩張表,一張使用者表,一張訊息表 isGet表示訊息是否被讀 2.使用java web做後臺,主要使用hibernate和struts2框架,xml資料格
Node + H5 + WebSocket + Koa2 實現簡單的多人聊天
接收 var msg ont for document back next bsp 服務器代碼 ( 依賴於 koa2, koa-websocket ) /* 實例化外部依賴 */ let Koa = require("koa2"); let WebSocket = r
Python網路程式設計----實現簡單的多人聊天室
還是用UDP,socket作為主體來實現,之前我們已經實現過單對單socket通訊,這次想實現群發功能 原理其實就是一臺伺服器在負責分配轉發資料,來達成廣播的效果,這些思路其實也差不多 但是多人聊天沒有這麼強的規整性,你可能沒等到A的訊息,就要去和B說話了,多執行緒就可以
socket實現簡單的多人聊天室
服務端Server.java package chatDemo; import java.awt.BorderLayout; import java.io.DataInputStream; import java.io.DataOutputStream; import j
1024_(即時通訊)使用node.js和socket.io實現多人聊天室
使用node.js和socket.io實現多人聊天室 2015年01月24日 03:24:54 遠古大猛獁 閱讀數:2775 轉自: http://www.cnblogs.com/flyoung2008/archive/2012/07/19/2600132.html
基於flask框架,使用websocket實現多人聊天室功能
後端程式碼: # web_socket 的收發機制 # web_socket --> web + socket --> http協議 + socket # web_socket協議就是ws協議 # 基於flask框架為web_socket提供服務 from flas
JAVA_網路程式設計_TCP_Socket通訊_聊天室_多人聊天/私聊_實現
Socket程式設計 連線(連線是通過輸入輸出流來傳送資料) 建立伺服器 package com.hp.tcp; import java.io.DataInputStream; import java.io.DataOutputStream; import
java 網路編輯實現多人聊天
java 網路編輯實現多人聊天。 1、網路程式設計主要是指完成C/S程式的開發,程式的開發結構有兩種: C/S(客戶端/伺服器),開發兩套程式,兩套程式需要同時維護。 B/S(瀏覽器/伺服器),開發一套程式,客戶端使用瀏覽器進行訪問。 2、C/S程式主要可
python簡單的多人聊天室
剛開始學習python,寫了一個聊天室練練手。 Server.py import socket,select,thread; host=socket.gethostname() port=5963 addr=(host,port) inputs=[] fd_n
Socket程式設計簡單實現區域網多人互聊
首先 我們要確認的是在同一個區域網,客戶端使用的IP地址是Server的IP地址和Server的埠。這樣接下來我們就能實現簡單的互聊。 package com.blueZhang; import java.io.BufferedReade
通訊基礎篇小專案-----多人聊天QQ的實現
自然界的通訊種類是多種多樣的,我們在每一天都會遇到各種各樣的通訊問題。然而通訊的實質是什麼,其實就是一種協議而已,僅此。就拿語言文字來說吧,每個國家制定不同的語言用來實現交流,這就是一種最基礎的通訊,每個文字代表的是一種不同的內容,這是人和人之間事先定好的協議,所以說,只要協議一旦確定,通
node實現簡單的群體聊天工具
cnblogs exp 服務器 href blog sim ref 使用 .com 一、使用的node模塊 1、express當做服務器 2、socket.io 前後通信的橋梁 3、opn默認打開瀏覽器的模塊(本質上用不到) 難點:前後通信 源碼地址:https:
java Socket實現簡單在線聊天(一)
結合線程 java.awt exc iss order 新建 exception connect border 出處:http://blog.csdn.net/tuzongxun 最近的項目有一個在線網頁交流的需求,由於很久以前做過的demo已經忘記的差不多了,因此便重新學