java websocket 1.0 tomcat_WebSocket基于javaweb+tomcat的简易demo程序

由于项目需要,前端向后台发起请求后,后台需要分成多个步骤进行相关操作,而且不能确定各步骤完成所需要的时间

倘若使用ajax重复访问后台以获取实时数据,显然不合适,无论是对客户端,还是服务端的资源很是浪费

这种情况下,WebSocket能够解决此问题

它不像普通的http请求或者ajax访问,返回相应的结果就关闭了连接

WebSocket在个人浅薄的知识看来是属于长连接,能保持连接,随时收发数据

所以对WebSocket进行了初步了解,并按照相关的教程尝试做了一个简易demo

首先需要了解的是,WebSocket的几个基本操作

客户端开启连接

客户端给服务器发送数据

服务器接收数据

服务器给客户端发送数据

客户端接收数据

其中,服务端和客户端都能监听三类基本事件:

1、onopen(打开连接) 2、onmessage(发送数据) 3、onclose(关闭连接)

本次的demo中使用了tomcat7.0作为服务端,据悉7.0以上的版本才支持WebSocket

首先使用eclipse创建一个web project

在工程根目录下的WEB-INF/lib目录中导入tomcat7.0的lib文件夹中的 tomcat7-websocket.jar 和 websocket-api.jar

然后在src目录下创建第一个类(重点在于继承ServerApplicationConfig)

packagecn.test.websocket;importjava.util.Set;importjavax.websocket.Endpoint;importjavax.websocket.server.ServerApplicationConfig;importjavax.websocket.server.ServerEndpointConfig;public class ApplicationConfig implementsServerApplicationConfig {//扫描注解

@Overridepublic Set> getAnnotatedEndpointClasses(Set>scan) {

System.out.println("scan WebSocket" +scan.size());//返回(起到过滤的作用,可以在返回前把里面部分类进行过滤)

returnscan;

}//实现接口

@Overridepublic SetgetEndpointConfigs(

Set>arg0) {//TODO Auto-generated method stub

return null;

}

}

接着创建第二个类,这个类用来处理WebSocket传送过来的数据(重点在于该类有@ServerEndpoint的注解)

packagecn.test.websocket;importjavax.websocket.OnClose;

import javax.websocket.CloseReason;

import javax.websocket.EndpointConfig;importjavax.websocket.OnMessage;importjavax.websocket.OnOpen;importjavax.websocket.Session;importjavax.websocket.server.ServerEndpoint;//注解规定了访问的URL

@ServerEndpoint("/echo")public classEchoSocket {/*** 客户端有连接的时候就会调用这个方法*/@OnOpenpublic voidopen(Session session, EndpointConfig config){

System.out.println(session.getId()+"#############");

}/*** 客户端连接断开就会调用此方法*/@OnClosepublic voidclose(Session session,CloseReason reason){

System.out.println(session.getId()+ "连接关闭了");

}/*** 接收到客户端的信息

*@parammsg

*@paramlast*/@OnMessagepublic void message(Session session,boolean last,String msg){

System.out.println("客户端说" +msg);try{

session.getBasicRemote().sendText("ni hao too");

Thread.sleep(3000);//三秒后再发送一条信息,用于验证是否实现数据实时更新

session.getBasicRemote().sendText("ni hao too twice");

}catch(Exception e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}

/**

*错误监听(当没有关闭socket连接就关闭浏览器会异常)

*/

@OnError

public void error(Session session, Throwable error){

String id = session.getId();

System.out.println("出错的session的id是" + id);

}

publicEchoSocket(){

System.out.println("Socket对象创建");//通过对象的创建可以知道不同socket之间的通信不会共享成员变量

}

}

本案例中,使用的是基于注解的方法,让ApplicationConfig扫描注解

(实际上还有实现接口实现的方法,同理可以让ApplicationConfig扫描实现接口的类)

后台所需的类已经写好了,接下来就写一个简单的jsp页面

在工程下的index.jsp如下(实际上html也可以)

WebSocket示例

open

发送

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值