1. 程式人生 > >ajax實現簡單的多人聊天

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已經忘記的差不多了,因此便重新學