`

Java EE 7中对WebSocket 1.0的支持

    博客分类:
  • java
 
阅读更多

 

原文链接:http://www.javaarch.net/jiagoushi/749.htm

 

 Java EE 7中对WebSocket 1.0的支持
 
 
 1.server端
 
 pom依赖:
 
	<dependency>
		<groupId>javax</groupId>
		<artifactId>javaee-api</artifactId>
		<version>7.0-b82</version>
		<scope>provided</scope>
	</dependency>
	
src/main/java/com/hmkcode/MyServerEndpoint.java

	package com.hmkcode;
	 
	import java.io.IOException;
	import java.util.LinkedList;
	import javax.websocket.EncodeException;
	import javax.websocket.OnClose;
	import javax.websocket.OnMessage;
	import javax.websocket.OnOpen;
	import javax.websocket.Session;
	import javax.websocket.server.PathParam;
	import javax.websocket.server.ServerEndpoint;
	 
	@ServerEndpoint(value="/websocket/{client-id}")
	public class MyServerEndpoint {
	 
		private static final LinkedList<Session> clients = new LinkedList<Session>();
	 
		@OnOpen
		public void onOpen(Session session) {
			clients.add(session);
		}
		@OnMessage
		public void onMessage(String message,@PathParam("client-id") String clientId) {
			for (Session client : clients) {
				try {
					client.getBasicRemote().sendObject(clientId+": "+message);            
	 
				} catch (IOException e) {
					e.printStackTrace();
				} catch (EncodeException e) {
					e.printStackTrace();
				}
			}
		}
		@OnClose
		public void onClose(Session peer) {
			clients.remove(peer);
		}
	}
	
@ServerEndpoint(value=”/websocket/{client-id}”)是client连接的url地址,{client-id}是每个client连接的名称标识。
@onOpen,@onMessag和@onClose是对应的每个session连接生命周期的回调函数

2. websocket客户端(桌面端)

pom依赖:

	<dependency>
		<groupId>javax</groupId>
		<artifactId>javaee-api</artifactId>
		<version>7.0-b82</version>
	</dependency>
	<dependency>
		<groupId>org.glassfish.tyrus</groupId>
		<artifactId>tyrus-client</artifactId>
		<version>1.0-rc3</version>
	</dependency>
	<dependency>
		<groupId>org.glassfish.tyrus</groupId>
		<artifactId>tyrus-container-grizzly</artifactId>
		<version>1.0-rc3</version>
	</dependency>
	
src/main/java/com/hmkcode/MyClient.java

	package com.hmkcode;
	 
	import java.io.IOException;
	import javax.websocket.ClientEndpoint;
	import javax.websocket.OnError;
	import javax.websocket.OnMessage;
	import javax.websocket.OnOpen;
	import javax.websocket.Session;
	 
	@ClientEndpoint
	public class MyClient {
		@OnOpen
		public void onOpen(Session session) {
			System.out.println("Connected to endpoint: " + session.getBasicRemote());
			try {
				session.getBasicRemote().sendText("Hello");
			} catch (IOException ex) {
			}
		}
	 
		@OnMessage
		public void onMessage(String message) {
			System.out.println(message);
		}
	 
		@OnError
		public void onError(Throwable t) {
			t.printStackTrace();
		}
	}
	
src/main/java/com/hmkcode/App.java

	package com.hmkcode;
	 
	import java.io.BufferedReader;
	import java.io.IOException;
	import java.io.InputStreamReader;
	import java.net.URI;
	import javax.websocket.ContainerProvider;
	import javax.websocket.DeploymentException;
	import javax.websocket.Session;
	import javax.websocket.WebSocketContainer;
	 
	public class App {
	 
		public Session session;
	 
		protected void start()
				 {
	 
				WebSocketContainer container = ContainerProvider.getWebSocketContainer();
	 
				String uri = "ws://localhost:8080/websocket-glassfish-server/websocket/desktop-client";
				System.out.println("Connecting to " + uri);
				try {
					session = container.connectToServer(MyClient.class, URI.create(uri));
				} catch (DeploymentException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}             
	 
		}
		public static void main(String args[]){
			App client = new App();
			client.start();
	 
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
			String input = "";
			try {
				do{
					input = br.readLine();
					if(!input.equals("exit"))
						client.session.getBasicRemote().sendText(input);
	 
				}while(!input.equals("exit"));
	 
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
3. client web客户端

/src/main/webapp/index.htm

	<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
	<html xmlns="http://www.w3.org/1999/xhtml">
	 
	<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>Java API for WebSocket (JSR-356)</title>
	<link href="bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
	<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
	<script src="websocket.js" type="text/javascript"></script>
	</head>
	<body>
		<div class="container">
			<h1>Java API for WebSocket (JSR-356)</h1>
			<div>
				<span id="status" class="label label-important">Not Connected</span> 
			</div>    
			<br/>
	 
			<label style="display:inline-block">Message: </label><input type="text" id="message"  />
			<button id="send" class="btn btn-primary" onclick="sendMessage()">Send</button>
	 
			<table id="received_messages" class="table table-striped">
				<tr>
					<th>#</th>
					<th>Sender</th>
					<th>Message</th>
				</tr>
			</table>
		</div>
	</body>
	</html>
	
/src/main/webapp/websocket.js


	var URL = "ws://localhost:8080/websocket-glassfish-server/websocket/web-client";
	var websocket;
	 
	$(document).ready(function(){
		connect();  
	});
	 
	function connect(){
			websocket = new WebSocket(URL);
			websocket.onopen = function(evnt) { onOpen(evnt) };
			websocket.onmessage = function(evnt) { onMessage(evnt) };
			websocket.onerror = function(evnt) { onError(evnt) };
	}
	function sendMessage() {
		websocket.send($("#message").val());
	}
	function onOpen() {
		updateStatus("connected")
	}
	function onMessage(evnt) {
		if (typeof evnt.data == "string") {
	 
			$("#received_messages").append(
							$('<tr/>')
							.append($('<td/>').text("1"))
							.append($('<td/>').text(evnt.data.substring(0,evnt.data.indexOf(":"))))
							.append($('<td/>').text(evnt.data.substring(evnt.data.indexOf(":")+1))));
		} 
	}
	function onError(evnt) {
		alert('ERROR: ' + evnt.data);
	}
	function updateStatus(status){
		if(status == "connected"){
			$("#status").removeClass (function (index, css) {
			   return (css.match (/\blabel-\S+/g) || []).join(' ')
			});
			$("#status").text(status).addClass("label-success");
		}
	}
	
不过web端需要在支持websokcet的应用服务器上跑。

 

分享到:
评论

相关推荐

    javax.websocket-api-1.0.jar.zip

    "javax.websocket-api-1.0.jar"是Java WebSocket API的一个实现,它是Java EE 7规范的一部分,允许开发者在服务器端和客户端之间建立WebSocket连接。 WebSocket API的核心接口包括`ServerEndpoint`、`...

    基于websocket和java的多人聊天室.docx

    Java EE 7 中的 WebSocket API 定义了 WebSocket 1.0 协议,提供了对 WebSocket 连接的管理和数据传输的支持。Tomcat 8 是 Java EE 7 的一个实现,提供了对 WebSocket 1.0 API 的支持。 三、多人聊天室实现架构 ...

    websocket、catalina和javax.websocket-api-1.0 jar

    `javax.websocket-api-1.0.jar`是一个Java WebSocket API的实现,它是Java EE 7规范的一部分。这个库提供了服务器端WebSocket编程所需的所有接口和类,比如`javax.websocket.ServerEndpoint`注解,用于标记提供...

    Java EE 7 Development with WildFly

    最后,本书还特别关注了Java EE 7中的EJBs(Enterprise JavaBeans),这是一个重要的组成部分,用于构建分布式系统。 - **EJB 3.2 概览**:概述了EJB 3.2的主要功能和改进。 - **开发Singleton EJBs**:解释了如何...

    Java.EE.7.pdf.zip

    1. **集成开发环境**:NetBeans提供了全面的代码编辑、调试、测试和部署工具,特别优化了对Java EE 7的支持。 2. **模板和向导**:为常见的Java EE组件,如Web服务、EJB、JPA实体等提供预定义的模板,快速创建项目...

    JAVA EE 6 jar包集合

    7. **WebSocket API**:Java EE 6引入了WebSocket API,提供了一种低延迟、全双工的通信机制,使得服务器和客户端能够实时交互数据,适合于在线游戏、聊天应用等场景。 8. **Contexts and Dependency Injection ...

    java_ee_sdk-8u1.zip

    4. **JSR 374 - Java API for JSON Processing (JSON-P) 1.1** 和 **JSR 375 - Java API for JSON Binding (JSON-B) 1.0**:增强了对JSON数据格式的支持,允许更方便的数据绑定和处理。 5. **JSR 369 - Java ...

    A sample Java EE 7 application ran with OpenLiberty.io.zip

    Java EE 7(Java Platform, ...通过分析这个示例,开发者可以学习到如何在OpenLiberty服务器上配置和运行Java EE 7应用,以及了解Java EE 7中的各种技术如何协同工作,为构建高效、可扩展的企业级应用程序提供支持。

    Java EE 6 中文 API 文档

    7. **WebSocket API**:虽然不是Java EE 6的核心部分,但Java EE 7引入了WebSocket API,Java EE 6开发者可能也会关注这一技术,它提供了双向通信的能力,使得实时应用的开发成为可能。 8. **Batch Applications ...

    javaee-api-7.0.zip

    8. **WebSocket**:Java EE 7引入了WebSocket 1.0,允许双向通信,为实时应用如聊天室、游戏等提供了基础。 9. **JSON Processing (JSON-P) 和 JSON-B (JSON Binding)**:这两个API帮助开发者处理JSON格式的数据,...

    javaee5-doc-api

    EJB 3.0是Java EE 5中的核心组件之一,它极大地简化了EJB的使用,减少了对XML配置的依赖。实体Bean(Entity Beans)采用了注解驱动,无需XML配置,大大降低了学习和使用的难度。会话Bean(Session Beans)也变得更加...

    Java EE 6 DOC API (html版,英文完整)

    11. **JavaMail API**:用于发送和接收电子邮件,Java EE 6中包含了对SMTP、IMAP和POP3的支持。 12. **WebSocket API**:虽然不是Java EE 6的一部分,但随着后续版本的更新,WebSocket成为了重要的通信协议,允许...

    JavaEE7 API 文档

    1. **Servlet 3.1**:这是JavaEE7中用于处理HTTP请求的核心技术,更新了异步处理能力,支持WebSocket协议,以及增强的过滤器和监听器功能。 2. **JSP 2.3**:JavaServer Pages(JSP)提供了动态网页生成的能力,2.3...

    javaEE6jar包

    7. **WebSocket API**:Java EE 6引入了WebSocket API,为实时双向通信提供了基础,使得Web应用能够实现类似桌面应用的交互体验。 8. **Java API for RESTful Web Services (JAX-RS 1.1)**:JAX-RS是用于创建...

    websocket的api

    在Java中,WebSocket API主要由Java EE 7引入,以支持WebSocket 1.0规范。官方的WebSocket API通常包含在`javax.websocket`包下,这正是`websocket-api.jar`提供的内容。 `websocket-api.jar`文件是Tomcat 7.0.62...

    JavaEE 7 Development with WildFly pdf

    书中还可能包含对Java EE 7提供的新API的介绍和案例实践,例如JAX-RS(Java API for RESTful Web Services)2.0、Java Message Service (JMS) 2.0、Bean Validation 1.1、Java API for JSON Processing 1.0、Java ...

    java_ee_sdk-8u1.zip java ee 8 sdk 解压后重新压缩的

    3. **JSP 2.3**:JavaServer Pages(JSP)2.3版本在Java EE 8中提供了更简洁的表达式语言(EL),改进了错误处理,并引入了对JSTL 1.2的内置支持,使得开发者能够更高效地创建动态Web页面。 4. **JSF 2.3**:Java...

    JAVA EE 6 英文API.rar

    8. **WebSocket**: 虽然不是Java EE 6标准的一部分,但在后续的Java EE 7中引入,WebSocket提供了一种双向通信的协议,允许服务器主动向客户端推送数据,对于实时应用如在线游戏和聊天室等非常有用。 9. **JSR 311 ...

    Java EE 6 tutorial 配套example代码

    8. **WebSocket**:Java EE 6还引入了WebSocket API,支持双向通信。示例可能涉及客户端和服务器端的WebSocket连接,以及数据的发送和接收。 通过研究这些示例,开发者不仅可以学习到Java EE 6的各个核心组件,还能...

Global site tag (gtag.js) - Google Analytics