jsp+js+socket实现javaweb网页聊天室

来源:互联网 发布:黑产数据交易平台 编辑:程序博客网 时间:2024/06/10 19:25

学一位大牛博客,写到了自己的网站项目中


用到三个文件:IMChat.jsp   IMChat.js   ChatRoom.java

IMChat.jsp 

<%@ page language="java" contentType="text/html; charset=utf-8"    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" "http://www.w3.org/TR/html4/loose.dtd"><html><head><script type="text/javascript" src="js/IMChat.js"></script><base href="<%=basePath%>"><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>429专属聊天室</title></head><body><div id="divWelcome"><h1>Welcome to 429 ChatRoom</h1></div><div id="divRoom"><input type="text" id="text"/><input type="button" value="Send" onclick="send()"/><br/><input type="button" value="Close" onclick="closeW()"/>//这里强调!千万不能写成close(),在这卡了一个小时找不到原因,也许是关键字或者保留字什么的原因</div><div id="message"></div></body></html>

IMChat.js   在js文件夹中

var websocket = null;//在servlet设置拦截websocketif("WebSocket" in window){//websocket = new WebSocket("ws://123.206.113.157:8080/FLHK/websocket");//专属服务器地址websocket = new WebSocket("ws://localhost:8080/FLHK/websocket");//连接tomcat地址}else{alert("Not support websocket");//浏览器不支持websocket}websocket.onerror=function(){//发生错误时在信息部分显示setMessageInnerHTML("some error happened!");}websocket.onopen=function(){//聊天室已经打开setMessageInnerHTML("Room is open.");}websocket.onmessage=function(){//发送信息setMessageInnerHTML(event.data);}websocket.onclose=function(){setMessageInnerHTML("close");}window.onbeforeunload=function(){//在关闭聊天室之前就关闭了页面websocket.close();}function closeW(){//关闭连接websocket.close();}function setMessageInnerHTML(innerHTML){//发送信息到ChatRoomdocument.getElementById("message").innerHTML +=innerHTML+"<br/>";}function send(){//从输入框获取后发送var message = document.getElementById("text").value;websocket.send(message);}

ChatRoom.java

package fourkings;import java.io.IOException;import java.util.concurrent.CopyOnWriteArraySet;import javax.websocket.OnClose;import javax.websocket.OnError;import javax.websocket.OnMessage;import javax.websocket.OnOpen;import javax.websocket.Session;import javax.websocket.server.ServerEndpoint;@ServerEndpoint("/websocket")//此处拦截websocketpublic class ChatRoom {private static int onlineCount=0;private static CopyOnWriteArraySet<ChatRoom> webSocketSet=new CopyOnWriteArraySet<ChatRoom>();private Session session;@OnOpenpublic void OnOpen(Session session){this.session=session;webSocketSet.add(this);++onlineCount;System.out.println("有新的连接加入!当前在线人数为:"+onlineCount);}@OnClosepublic void OnClose(){webSocketSet.remove(this);--onlineCount;System.out.println("有连接关闭!当前在线人数为:"+onlineCount);}@OnMessagepublic void OnMessage(String message,Session session){System.out.println("收到客户端消息:"+message);for(ChatRoom item:webSocketSet){try{item.sendMessage(message);}catch(IOException e){e.printStackTrace();continue;}}}@OnErrorpublic void OnError(Session session,Throwable error){System.out.println("发生错误");error.printStackTrace();}public void sendMessage(String message) throws IOException{System.out.println("send..."+message);this.session.getBasicRemote().sendText(message);}}

源码地址

http://download.csdn.net/detail/damionew/9870580

原创粉丝点击