Java EE HTML5 WebSocket 示例【转自http://www.oschina.net/translate/java-ee-html5-websocket-example】
来源:互联网 发布:js hidden input 赋值 编辑:程序博客网 时间:2024/06/13 10:06
在本教程中,我们将借助于Java EE的WebSocket(服务器端)实现一个HTML5的WebSocket连接。
1. 介绍
HTML5给Web浏览器带来了全双工TCP连接websocket标准服务器的能力。
换句话说,浏览器能够与服务器建立连接,通过已建立的通信信道来发送和接收数据而不需要由HTTP协议引入额外其他的开销来实现。
在本教程中我们将在Java EE环境下实现一个简单的websockect服务器端来和客户端进行数据交互。
本教程需要以下环境:
- Ubuntu 12.04
- JDK 1.7.0.21
- Glassfish 4.0
2. WebSocket服务器端
让我们定义一个 Java EE websocket服务器端:
WebSocketTest.java
package
com.byteslounge.websockets;
import
java.io.IOException;
import
javax.websocket.OnClose;
import
javax.websocket.OnMessage;
import
javax.websocket.OnOpen;
import
javax.websocket.Session;
import
javax.websocket.server.ServerEndpoint;
@ServerEndpoint
(
"/websocket"
)
public
class
WebSocketTest {
@OnMessage
public
void
onMessage(String message, Session session)
throws
IOException, InterruptedException {
// Print the client message for testing purposes
System.out.println(
"Received: "
+ message);
// Send the first message to the client
session.getBasicRemote().sendText(
"This is the first server message"
);
// Send 3 messages to the client every 5 seconds
int
sentMessages =
0
;
while
(sentMessages <
3
){
Thread.sleep(
5000
);
session.getBasicRemote().
sendText(
"This is an intermediate server message. Count: "
+ sentMessages);
sentMessages++;
}
// Send a final message to the client
session.getBasicRemote().sendText(
"This is the last server message"
);
}
@OnOpen
public
void
onOpen() {
System.out.println(
"Client connected"
);
}
@OnClose
public
void
onClose() {
System.out.println(
"Connection closed"
);
}
}
@ServerEndpoint 注解是一个类层次的注解,它的功能主要是将目前的类定义成一个websocket服务器端。注解的值将被用于监听用户连接的终端访问URL地址。
onOpen 和 onClose 方法分别被@OnOpen和@OnClose 所注解。这两个注解的作用不言自明:他们定义了当一个新用户连接和断开的时候所调用的方法。
onMessage 方法被@OnMessage所注解。这个注解定义了当服务器接收到客户端发送的消息时所调用的方法。注意:这个方法可能包含一个javax.websocket.Session可选参数(在我们的例子里就是session参数)。如果有这个参数,容器将会把当前发送消息客户端的连接Session注入进去。
本例中我们仅仅是将客户端消息内容打印出来,然后首先我们将发送一条开始消息,之后间隔5秒向客户端发送1条测试消息,共发送3次,最后向客户端发送最后一条结束消息。
3. 客户端
现在我们要来写websocket测试应用的客户端:
page.html
<!DOCTYPE html>
<html>
<head>
<title>Testing websockets</title>
</head>
<body>
<div>
<input type=
"submit"
value=
"Start"
onclick=
"start()"
/>
</div>
<div id=
"messages"
></div>
<script type=
"text/javascript"
>
var
webSocket =
new
WebSocket(
'ws://localhost:8080/byteslounge/websocket'
);
webSocket.onerror =
function
(event) {
onError(event)
};
webSocket.onopen =
function
(event) {
onOpen(event)
};
webSocket.onmessage =
function
(event) {
onMessage(event)
};
function
onMessage(event) {
document.getElementById(
'messages'
).innerHTML
+=
'<br />'
+ event.data;
}
function
onOpen(event) {
document.getElementById(
'messages'
).innerHTML
=
'Connection established'
;
}
function
onError(event) {
alert(event.data);
}
function
start() {
webSocket.send(
'hello'
);
return
false
;
}
</script>
</body>
</html>
这是一个简单的页面,包含有JavaScript代码,这些代码创建了一个websocket连接到websocket服务器端。
onOpen 我们创建一个连接到服务器的连接时将会调用此方法。
onError 当客户端-服务器通信发生错误时将会调用此方法。
onMessage 当从服务器接收到一个消息时将会调用此方法。在我们的例子中,我们只是将从服务器获得的消息添加到DOM。
我们连接到websocket 服务器端,使用构造函数 new WebSocket() 而且传之以端点URL:
ws://localhost:8080/byteslounge/websocket
super0555
翻译于 1年前
0人顶
顶 翻译的不错哦!
6. 下载源码
在本页的末尾有范例源代码下载链接,源码在Glassfish 4(需要兼容Java EE 7的服务器)上通过测试。- Java EE HTML5 WebSocket 示例【转自http://www.oschina.net/translate/java-ee-html5-websocket-example】
- Java EE HTML5 WebSocket 示例
- Java EE HTML5 WebSocket 示例
- Java EE HTML5 WebSocket 示例
- Java EE HTML5 WebSocket 示例
- Java EE HTML5 WebSocket 示例
- Java EE HTML5 WebSocket 示例
- Java EE HTML5 WebSocket 示例
- Java EE HTML5 WebSocket 示例
- Java EE HTML5 WebSocket 示例
- Java EE HTML5 WebSocket 示例
- Java EE HTML5 WebSocket 示例
- Java EE HTML5 WebSocket 示例
- Java EE HTML5 WebSocket 编码器与解码器的例子
- Java EE HTML5 WebSocket 编码器与解码器的例子
- Java EE 7: Building Web Applications with WebSocket, JavaScript and HTML5
- HTML5 WebSocket 应用示例
- HTML5 WebSocket DEMO示例
- Linux 下安装Eclipse
- 0PE专用菜单文件MENU.0PE解读(二) 批处理篇
- 大话设计模式C++实现-第20章-迭代器模式
- HDU1718 Rank【水题】
- HDU_1010 Tempter of the Bone[DFS]
- Java EE HTML5 WebSocket 示例【转自http://www.oschina.net/translate/java-ee-html5-websocket-example】
- 判断一个字符串是否是由字母组成
- 算法导论学习笔记(3)-习题2.3-7-排序+二分
- 架构与反射——Struts2开发过程与处理流程解析
- CentOS-6.3安装Mysql-5.5.29
- 【剑指Offer面试编程题】题目1372:最大子向量和--九度OJ
- Excel表格传送至AS400时乱码问题
- UINavigationController
- GRUB4DOS资源索引帖,欢迎跟帖补充