java ee7 特性_JavaEE 7 新特性之WebSocket

开发环境:

JDK:1.7及以上

JavaEE:1.7,因为只有javaee7才有websocke的api,也可以使用1.6单都导入websocket-api.jar试试(本人不清楚)

注意:没有使用springmvc websocket包,利用的是JavaEE7  javax.websocket包,不需要任何xml配置

springMVC也集成了websocket,不了解

--------------------------------------------------------------------------------------------------------------------------------------------

Servlet和JSP规范版本对应关系:

Servlet规范版本

JSP版本

JSF版本

JAVA EE版本

Servlet2.3

JSP1.2、JSP1.1

J2EE1.3

Servlet2.4

JSP2.0

JSF1.1

J2EE1.4

Servlet2.5

JSP2.1

JSF1.2、JSF2.0

Java EE5

Servlet3.0

JSP2.2

Java EE6

Tomcat所对应的Servlet/JSP规范和JDK版本:

Servlet/JSP SpecApache Tomcat versionActual release revisionMinimum Java Version

3.0/2.2

7.0.x

7.0.12

1.6

2.5/2.1

6.0.x

6.0.32

1.5

2.4/2.0

5.5.x

5.5.33

1.4

2.3/1.2

4.1.x (archived)

4.1.40 (archived)

1.3

2.2/1.1

3.3.x (archived)

3.3.2 (archived)

1.1

--------------------------------------------------------------------------------------------------------------------------------------------

importjava.io.IOException;importjava.util.concurrent.CopyOnWriteArraySet;importjavax.websocket.OnClose;importjavax.websocket.OnError;importjavax.websocket.OnMessage;importjavax.websocket.OnOpen;importjavax.websocket.Session;importjavax.websocket.server.ServerEndpoint;//@ServerEndpoint("/test")

@ServerEndpoint(name = "myFirstServlet",urlPatterns = {"/test"} )public classMyWebSocket {//静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。

private static int onlineCount = 0;//concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。若要实现服务端与单一客户端通信的话,可以使用Map来存放,其中Key可以为用户标识

private static CopyOnWriteArraySet webSocketSet = new CopyOnWriteArraySet();//与某个客户端的连接会话,需要通过它来给客户端发送数据

privateSession session;/*** 连接建立成功调用的方法

*@paramsession 可选的参数。session为与某个客户端的连接会话,需要通过它来给客户端发送数据*/@OnOpenpublic voidonOpen(Session session){this.session =session;

webSocketSet.add(this); //加入set中

addOnlineCount(); //在线数加1

System.out.println("有新连接加入!当前在线人数为" +getOnlineCount());

}/*** 连接关闭调用的方法*/@OnClosepublic voidonClose(){

webSocketSet.remove(this); //从set中删除

subOnlineCount(); //在线数减1

System.out.println("有一连接关闭!当前在线人数为" +getOnlineCount());

}/*** 收到客户端消息后调用的方法

*@parammessage 客户端发送过来的消息

*@paramsession 可选的参数*/@OnMessagepublic voidonMessage(String message, Session session) {

System.out.println("来自客户端的消息:" +message);//群发消息

for(MyWebSocket item: webSocketSet){try{

item.sendMessage(message);

}catch(IOException e) {

e.printStackTrace();continue;

}

}

}/*** 发生错误时调用

*@paramsession

*@paramerror*/@OnErrorpublic voidonError(Session session, Throwable error){

System.out.println("发生错误");

error.printStackTrace();

}/*** 这个方法与上面几个方法不一样。没有用注解,是根据自己需要添加的方法。

*@parammessage

*@throwsIOException*/

public void sendMessage(String message) throwsIOException{this.session.getBasicRemote().sendText(message);//this.session.getAsyncRemote().sendText(message);

}public static synchronized intgetOnlineCount() {returnonlineCount;

}public static synchronized voidaddOnlineCount() {

MyWebSocket.onlineCount++;

}public static synchronized voidsubOnlineCount() {

MyWebSocket.onlineCount--;

}

}

My WebSocket

Send Close

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值