JSP + AJAX 打造簡單聊天室

原创 2007年09月12日 16:08:00

本文代碼下載地址:http://download.csdn.net/source/798197
 
一個簡單的聊天室程式,但基本包含了簡單的AJAX的使用方法,可以做為簡單的Demo用來學習。
整個程式包含三個文件,頁面文件chat.html,後臺處理的Servlet文件Chat.java以及簡單的用戶資料的UserSessionListener.java類。其中chat.html用于接受用戶輸入,並將接收資料傳給後臺Servlet處理,UserSessionListener主要用於登入和登出時用戶列表及提示信息的處理。 
 
chat.html如下:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=BIG5" />
<title></title>
<script type="text/javascript">...
var HttpRequest;
var url = "Chat";
function getRequest()...{
    
if(window.XMLHttpRequest)...{
        
return(new XMLHttpRequest());
    }
else if(window.ActiveXObject)...{
        
try...{
            
return(new ActiveXObject("Msxm12.XMLHTTP"));
        }
catch(e)...{
            
try...{
                
return(new ActiveXObject("Microsoft.XMLHTTP"));
            }
catch(e)...{}
        }

    }

}

function sendRequest()...{
    
if(document.getElementById("txtMessage").value.length<=0)...{
        
return false;
    }

    HttpRequest 
= getRequest();
    
    
//HttpRequest.onreadystatechange = getMessage;
    HttpRequest.open("POST", url, true);
    HttpRequest.setRequestHeader(
"Content-Type""application/x-www-form-urlencoded");
    
var msg;
    msg 
= "Action=AddMessage&Message=" + escape(document.getElementById("txtMessage").value);
    HttpRequest.send(msg);
    document.getElementById(
"txtMessage").value = "";
    
//document.getElementById("txtMessage").focus();
}

function DisplayMessage()...{
    
if(HttpRequest.readyState == 4 && HttpRequest.status == 200)...{
        
//alert("abd");
        //alert(HttpRequest.responseText);
        var messages;
        
//alert(HttpRequest.responseText);
        messages = HttpRequest.responseText.split("!@#");
        
//document.writeln(messages[0]);
        //document.writeln(messages[1]);
        document.getElementById("Messages").innerHTML = messages[0];
        document.getElementById(
"userList").innerHTML = "User List <br>" + messages[1];
        
//document.getElementById
    }

}

function logout()...{
    HttpRequest 
= getRequest();
    HttpRequest.open(
"POST", url, true);
    HttpRequest.setRequestHeader(
"Content-Type""application/x-www-form-urlencoded");
    
var msg;
    
    msg 
= "Action=Logout";
    HttpRequest.send(msg);
}

function getMessage()...{
    HttpRequest 
= getRequest();
    HttpRequest.onreadystatechange 
= DisplayMessage;
    HttpRequest.open(
"POST", url, true);
    HttpRequest.setRequestHeader(
"Content-Type""application/x-www-form-urlencoded");
    
var msg;
    msg 
= "Action=GetMessage";
    HttpRequest.send(msg);
    document.all.txtMessage.focus();
}

function login()...{
    HttpRequest 
= getRequest();
    
var WshNetwork = new ActiveXObject("WScript.Network");
    
    HttpRequest.open(
"POST", url, true);
    HttpRequest.setRequestHeader(
"Content-Type""application/x-www-form-urlencoded");
    
var msg;
    msg 
= "Action=Login&UserName=" + WshNetwork.UserName;
    HttpRequest.send(msg);
    
    setInterval(
'getMessage();'1000);
}

function chkSubmit(e)...{
    
if(window.event)...{
        
var keyNumber = e.keyCode;
        
if(keyNumber == 13)...{
            sendRequest();
        }

    }

}

</script>
</head>
<body onunload="logout();" onload="login();">
    
<form action="#" onsubmit="return false;">
    
<table>
        
<tr valign="top">
            
<td width="400"><div id="Messages" style="font-size:9pt;width:800;height:400"></div></td>
            
<td width="100" id="userList"></td>
        
</tr>
    
</table>
    
<input type="text" size="20" id="txtMessage" onkeypress="chkSubmit(event);">
    
<button onclick="sendRequest();">Say</button>
    
</form>
</body>
</html>
 
用於處理頁面提交信息的Servlet Chat.java代碼如下:

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedList;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import moon.UserSessionListener;
/** *//**
 * Servlet implementation class for Servlet: Chat
 * 
 
*/

public class Chat extends javax.servlet.http.HttpServlet implements
  javax.servlet.Servlet 
...{
 
static final long serialVersionUID = 1L;
 
private String userName = "";
 
/**//*
  * (non-Java-doc)
  * 
  * @see javax.servlet.http.HttpServlet#HttpServlet()
  
*/

 
public Chat() ...{
  
super();
 }

 
private String getNow()...{
  Date date 
= new Date();
  SimpleDateFormat df 
= new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
  
return df.format(date);  
 }

 
 
/**//*
  * (non-Java-doc)
  * 
  * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request,
  *      HttpServletResponse response)
  
*/

 @SuppressWarnings(
"unchecked")
 
protected void doGet(HttpServletRequest request,
   HttpServletResponse response) 
throws ServletException, IOException ...{
  String action 
= request.getParameter("Action");
  
if (action == null...{
  }
 else if (action.equals("GetMessage")) ...{
   PrintWriter out 
= response.getWriter();
   out.print(getMessages() 
+ "!@#" + getOnlineUsers());
  }
 else if (action.equals("AddMessage")) ...{
   String message 
= request.getParameter("Message");
   userName 
= ((UserSessionListener) request.getSession()
     .getAttribute(
"UserName")).toString();
   addMessage(getNow() 
+ " " + userName + " Says: " + message);
  }
else if(action.equals("Logout"))...{
   request.getSession().removeAttribute(
"UserName");
  }
else if(action.equals("Login"))...{
   request.getSession().setAttribute(
"UserName"new UserSessionListener(request.getParameter("UserName")));
  }

  
// TODO Auto-generated method stub
 }

 
/**//*
  * (non-Java-doc)
  * 
  * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request,
  *      HttpServletResponse response)
  
*/

 
protected void doPost(HttpServletRequest request,
   HttpServletResponse response) 
throws ServletException, IOException ...{
  doGet(request, response);
  
// TODO Auto-generated method stub
 }

 @SuppressWarnings(
"unchecked")
 
private String getMessages() ...{
  String result 
= null;
  ServletContext application 
= getServletContext();
  LinkedList
<String> messages = (LinkedList<String>) application
    .getAttribute(
"ChatMessage");
  
if (messages == null...{
   result 
= "";
  }
 else ...{
   StringBuilder sb 
= new StringBuilder("");
   
for (String tmp : messages) ...{
    sb.append(tmp);
    sb.append(
"<br>");
   }

   result 
= sb.toString();
  }

  
return result;
 }

 @SuppressWarnings(
"unchecked")
 
private String getOnlineUsers() ...{
  String result;
  LinkedList
<String> onlineUsers = (LinkedList<String>)getServletContext().getAttribute("UserList");
  
if (onlineUsers == null...{
   result 
= "";
  }
 else ...{
   StringBuilder users 
= new StringBuilder("");
   
for (String tmp : onlineUsers) ...{
    users.append(tmp);
    users.append(
"<br>");
   }

   result 
= users.toString();
  }

  
return result;
 }

 @SuppressWarnings(
"unchecked")
 
private void addMessage(String message) ...{
  ServletContext application 
= getServletContext();
  
synchronized (application) ...{
   LinkedList
<String> messages = (LinkedList<String>) application
     .getAttribute(
"ChatMessage");
   
if (messages == null...{
    messages 
= new LinkedList<String>();
   }

   
if (messages.size() > 30...{
    messages.removeFirst();
   }

   messages.add(message);
   application.setAttribute(
"ChatMessage", messages);
  }

 }

 
public void destroy() ...{
  
super.destroy();
 }

}

 
用于做用戶登陸,登出處理類UserSessionListener代碼如下:
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedList;
public class UserSessionListener implements HttpSessionBindingListener ...{
 
private String userName;
 
public UserSessionListener(String userName) ...{
  
super();
  
this.userName = userName;
 }

 
 
private String getNow()...{
  Date date 
= new Date();
  SimpleDateFormat df 
= new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
  
return df.format(date);  
 }

 @SuppressWarnings(
"unchecked")
 
public void valueBound(HttpSessionBindingEvent arg0) ...{
  
// TODO Auto-generated method stub
  arg0.getSession().setMaxInactiveInterval(120);
  ServletContext application 
= arg0.getSession().getServletContext();
  
synchronized (application) ...{
   LinkedList
<String> userList = (LinkedList<String>) application
     .getAttribute(
"UserList");
   
if (userList == null...{
    userList 
= new LinkedList<String>();
   }

   userList.add(userName);
   application.setAttribute(
"UserList", userList);
   LinkedList
<String> messages = (LinkedList<String>) application
     .getAttribute(
"ChatMessage");
   
if (messages == null...{
    messages 
= new LinkedList<String>();
   }

   messages.add(getNow() 
+ " " +  userName + " Login...");
   application.setAttribute(
"ChatMessage", messages);
  }

 }

 @SuppressWarnings(
"unchecked")
 
public void valueUnbound(HttpSessionBindingEvent arg0) ...{
  
// TODO Auto-generated method stub
  ServletContext application = arg0.getSession().getServletContext();
  
synchronized (application) ...{
   LinkedList
<String> userList = (LinkedList<String>) application
     .getAttribute(
"UserList");
   userList.remove(userName);
   application.setAttribute(
"UserList", userList);
   LinkedList
<String> messages = (LinkedList<String>) application
     .getAttribute(
"ChatMessage");
   
if (messages == null...{
    messages 
= new LinkedList<String>();
   }

   messages.add(getNow() 
+ " " + userName + " Logout...");
   application.setAttribute(
"ChatMessage", messages);
  }

 }

 
/** *//**
  * 
@return the userName
  
*/

 
public String getUserName() ...{
  
return userName;
 }

 
/** *//**
  * 
@param userName
  *            the userName to set
  
*/

 
public void setUserName(String userName) ...{
  
this.userName = userName;
 }

 
public String toString() ...{
  
return this.userName;
 }

}

其中UserSessionListener類實現了HttpSessionBingdingListener接口,以便于在用戶登入和登出時實現用戶列表的更新。
 
版权声明:本文为博主原创文章,未经博主允许不得转载。

【Unity】简单聊天室功能的实现方法教程

由於有人問到如何建立聊天室 所以利用 Unity 中內建的 Network 來簡易說明 首先新增一個 Server.cs using UnityEngine; using System....
  • swj524152416
  • swj524152416
  • 2017年04月10日 14:08
  • 2128

AJAX+js实现实时聊天

 了解AJAX基本流程之后,根据我们实际需要可以完成很多功能,这里我通过AJAX+javascript完成了一个简单的基于网页的实时聊天工具,代码不是很多,但是对过程的理解是最重要的,每行我都有...
  • u012882327
  • u012882327
  • 2015年09月02日 11:21
  • 6010

ajax实现简单的多人聊天

原理:简单来说就是利用ajax的异步,ajax每隔一段时间会从后台获取数据而不刷新页面。 步骤:1。数据库里建两张表,一张用户表,一张消息表 isGet表示消息是否被读 2.使用java...
  • change_on
  • change_on
  • 2015年11月01日 21:10
  • 1083

简单的Ajax聊天室样例(servlet+jsp)

  • 2011年08月10日 17:41
  • 6KB
  • 下载

AJAX_JSP 聊天室1_0 源码

  • 2007年07月27日 13:51
  • 12KB
  • 下载

jsp,ajax实现的聊天室

  • 2012年02月20日 10:51
  • 2.45MB
  • 下载

jsp+ajax 无刷新聊天室

  • 2010年10月11日 21:53
  • 190KB
  • 下载

jsp聊天室AJAX

  • 2009年04月25日 23:56
  • 232KB
  • 下载

Ajax+jsp做的聊天室

  • 2009年11月03日 11:54
  • 4KB
  • 下载

jsp+ajax实现简单聊天室

  • 2008年03月23日 17:50
  • 13KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JSP + AJAX 打造簡單聊天室
举报原因:
原因补充:

(最多只允许输入30个字)