1、使用框架spring+springmvc+mybatis+jdk7+tomcat7+maven

2、基本原理:

    a. WebSocket协议是一种双向通信协议,它建立在TCP之上,同http一样通过TCP来传输数据,但是 它和http最大的不同有两点:

1.WebSocket是一种双向通信协议,在建立连接后,WebSocket服务器和Browser/UA都能主动地向对方发送或接收数据,就像Socket一样,不同的是WebSocket是一种建立在Web基础上的一种简单模拟Socket的协议;

2.WebSocket需要通过握手连接,类似于TCP它也需要客户端和服务器端进行握手连接,连接成功后才能相互通信。

    b.struts   和 websocket  是2条处理请求的路,被struts 匹配上了 ,自然就到不了 websocket的处  理逻辑,(http和ws是两种不同的请求协议,注意框架的拦截器(过滤器))

3、客户端:

<html>
<head>
<title>Title</title>
<style> div {
margin-left: auto;
margin-right: auto;
} </style>
</head>
<body onLoad="startWebSocket()">
<script type="text/javascript">
function clog(title) {
console.log(title);
} var ws = null;
function startWebSocket() { if ('WebSocket' in window) { try {
ws = new WebSocket("ws://127.0.0.1:80/websocket/tui");
} catch (e) {
clog("1");
}
} else if ('MozWebSocket' in window) {
ws = new MozWebSocket("ws://127.0.0.1:80/websocket/tui");
} else {
clog("websocket not support");
} ws.onmessage = function (evt) {
say(evt.data);
}; ws.onclose = function (evt) {
clog("close!");
}; ws.onopen = function (evt) {
clog("open");
};
} function sendMsg() {
ws.send(document.getElementById('writeMsg').value);
} function say(msg) {
var div = document.createElement("div");
div.innerHTML = msg;
document.body.appendChild(div);
} </script>
<div onClick="say('d')">WebSocket聊天室</div>
<div style="border:1px solid #09F"></div>
<input type="text" id="writeMsg"/>
<input type="button" value="send" onClick="sendMsg()"/> </body>
</html>

4、服务端:

@ServerEndpoint(value = "/websocket/tui")
public class WebSocketDemo{
private static final String GUEST_PREFIX = "Guest";
private static final AtomicInteger connectionIds = new AtomicInteger(0);
private static final Set<WebSocketDemo> connections = new HashSet<>(); private final String nickname;
private Session session; public WebSocketDemo() {
nickname = GUEST_PREFIX + connectionIds.getAndIncrement();
} //建立连接
@OnOpen
public void start(Session session) {
this.session = session;
connections.add(this);
String message = String.format("* %s %s", nickname, "has joined.");
System.out.println(message);
} //接受消息
@OnMessage
public void incoming(String message) {
System.out.println(message.toString());
//broadcast(filteredMessage);
broadcast(message.toString());
} //客户端关闭了连接
@OnClose
public void end() {
connections.remove(this);
String message = String.format("* %s %s", nickname, "has disconnected.");
System.out.println(message);
//broadcast(message);
} //WebSocket服务出错
@OnError
public void onError(Throwable t){
//log.error("Chat Error: " + t.toString(), t);
System.out.println("server has an error!");
} private static void broadcast(String msg) {
for (WebSocketDemo client : connections) {
try {
synchronized (client) {
client.session.getBasicRemote().sendText(msg);
}
} catch (IOException e) {
//log.debug("Chat Error: Failed to send message to client", e);
connections.remove(client);
try {
client.session.close();
} catch (IOException e1) {
// Ignore
}
String message = String.format("* %s %s",
client.nickname, "has been disconnected.");
broadcast(message);
}
}
}
}

注意事项:

1、访问拦截器

2、注意部署的包冲突,例如:javax.websocket只是编译需要,而发布不需要,maven依赖注意适用范围

附:

<!--websocket编译需要,发布不需要-->
<!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-coyote -->
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-coyote</artifactId>
<version>7.0.12</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-juli -->
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-juli</artifactId>
<version>8.5.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.websocket/javax.websocket-api -->
<dependency>
<groupId>javax.websocket</groupId>
<artifactId>javax.websocket-api</artifactId>
<version>1.1</version>
<scope>provided</scope>
</dependency>

jee websocket搭建总结的更多相关文章

  1. 基于SpringBoot+WebSocket搭建一个简单的多人聊天系统

    前言   今天闲来无事,就来了解一下WebSocket协议.来简单了解一下吧. WebSocket是什么   首先了解一下WebSocket是什么?WebSocket是一种在单个TCP连接上进行全双工 ...

  2. nodejs+mongoose+websocket搭建xxx聊天室

    简介 本文是由nodejs+mongoose+websocket打造的一个即时聊天系统:本来打算开发一个类似于网页QQ类似功能的聊天系统,但是目前只是开发了一个模块功能 --- 类似群聊的,即一对多的 ...

  3. php+websocket搭建简易聊天室实践

    1.前言 公司游戏里面有个简单的聊天室,了解了之后才知道是node+websocket做的,想想php也来做个简单的聊天室.于是搜集各种资料看文档.找实例自己也写了个简单的聊天室. http连接分为短 ...

  4. iis WebSocket 搭建环境及配置

    http://www.86y.org/art_detail.aspx?id=816       WebSocket是html5新增加的一种通信协议,目前流行的浏览器都支持这个协议,例如Chrome,S ...

  5. 使用Html5下WebSocket搭建简易聊天室

    一.Html5WebSocket介绍 WebSocket protocol 是HTML5一种新的协议(protocol).它是实现了浏览器与服务器全双工通信(full-duplex). 现在,很多网站 ...

  6. Spring Boot中使用Websocket搭建即时聊天系统

    1.首先在pom文件中引入Webscoekt的依赖 <!-- websocket依赖 --> <dependency> <groupId>org.springfra ...

  7. 基于websocket搭建简易群聊

    1.前端HTML <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset=&qu ...

  8. websocket搭建的聊天室

    在前后端数据交互的时候我们经常使用的是ajax,用的是传统的http协议,而http协议有个致命的缺点,就是请求一结束,连接就断开了, 我们为了保持这个链接的,通常会使用cookie,而自从h5出现w ...

  9. WebSocket 搭建简单聊天网站

    HTML5 WebSocket WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议. 在WebSocket API中,浏览器和服务器只需要做一个握手的动作,然后,浏 ...

随机推荐

  1. Daily Scrum Meeting ——SixthDay

    一.Daily Scrum Meeting照片 佳恺请假了...可能去约会了罢 二.Burndown Chart 欣慰,但是还是感到"鸭梨山大"! 三.项目进展 1.活动列表查询功 ...

  2. iOS 启动画面 代码自定义

    先来看一个可能会遇到的问题: 如果你已经删除了xcode为你的项目自动生成的LaunchScreen.storyboard, 然后你在测试你的app的时候发现,屏幕里出现了黑色的区域,如上图(画红线的 ...

  3. poj2104 K-th Number区间第k小值 主席树

    原来主席树就是可持久化线段树啊,刚知道,,, 作为一道裸题,还是必A的,然而一开始偷懒不写离散化跪了N多遍,后来在缪大的帮助下发现了这个问题,遂A之 ——又是这种破问题,实在不想说自己了 把n个数看成 ...

  4. BZOJ1055: [HAOI2008]玩具取名

    ... #include<bits/stdc++.h> using namespace std; int q[255]; char s[205]; char p[]={'W','I','N ...

  5. 深入分析Java ClassLoader原理

    一.什么是ClassLoader? 大家都知道,当我们写好一个Java程序之后,不是管是CS还是BS应用,都是由若干个.class文件组织而成的一个完整的Java应用程序,当程序在运行时,即会调用该程 ...

  6. Twentydaysgone

    这个暑假,在学校呆了一个月,考了两次科目二,被驾校坑了五百块,四级又挂了,段位差点掉到白银 参加二十多天工作室的培训,学长直接带着做itheima的某某安全卫士,跟着视频也迷迷瞪瞪敲完了代码,一知半解 ...

  7. H TC並沒有成為下一個摩托羅拉或諾基亞。

    關於2014年第四季度,H T C在三季度財報說明中提到,“年度旗艦H T CO ne(M 8)與中端機型H T C D esire系列在競爭日趨激烈的智能手機市場保持穩定的銷售,市占率有所提升,延續 ...

  8. # 20145205 《Java程序设计》第1周学习总结

    教材学习内容总结 第一章中 JAVA的三大体系:JAVA SE .JAVA EE.JAVA ME.而在其中书中主要介绍我们入门学习者所要学习的JVAA SE,其又可分为四个主要组成部分同Java SE ...

  9. Symbols

    https://hacks.mozilla.org/2015/06/es6-in-depth-symbols/ <script> function w(wcon) { console.lo ...

  10. Linux用过的命令

    -上传sudo -u b2b rz--创建文件夹sudo -u b2b mkdir--copysudo -u b2b cp /b2b/apache-tomcat-7.0.64/matt/DqN017S ...