打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Java EE HTML5 WebSocket 示例 这篇评论不错,有很多有用信息

网友评论20

  • chengArthur 发表于 2013-08-15 09:10
    貌似很不错哦,这个很重要
  • kukaqin 发表于 2013-08-15 09:37
    唉,服务端升级好搞,要兼容所有的浏览器太难了。
  • 陈冠羽 发表于 2013-08-15 10:20
    支持IE6吗~
  • 1的10次方 发表于 2013-08-15 11:27
    楼上。。。。=_=~
  • chenganshi 发表于 2013-08-15 11:30
    流行的IE6啊
  • longware 发表于 2013-08-15 18:57

    引用来自“陈冠羽”的评论

    支持IE6吗~

    呵呵,又是ie6,ie10才支持websocket
  • 唐阳 来自 Android 发表于 2013-08-15 20:35

    引用来自“kukaqin”的评论

    唉,服务端升级好搞,要兼容所有的浏览器太难了。

    为啥要兼容呢?难道你们还要兼容不支持cookie的浏览器?
    有些不支持的迟早要鼓起勇气说no,不支持websocket浏览器就不给用,大家都这么做了,迟早会改变
  • 魔神翼 发表于 2013-08-15 22:09
    求教Tomcat7能运行吗?
  • kukaqin 发表于 2013-08-16 20:31

    引用来自“魔神翼”的评论

    求教Tomcat7能运行吗?

    tomcat 7 必须能运行
  • 魔神翼 发表于 2013-08-16 21:11

    引用来自“kukaqin”的评论

    引用来自“魔神翼”的评论

    求教Tomcat7能运行吗?

    tomcat 7 必须能运行
    但是我找不到javax.websocket在哪个jar文件里面
  • 咖啡兔 发表于 2013-08-16 22:05
    以后别提供zip了,直接github,方便交流
  • kukaqin 发表于 2013-08-27 10:10

    引用来自“魔神翼”的评论

    引用来自“kukaqin”的评论

    引用来自“魔神翼”的评论

    求教Tomcat7能运行吗?

    tomcat 7 必须能运行
    但是我找不到javax.websocket在哪个jar文件里面
    在 tomcat 的lib 下的 catalina.jar 和 tomcat-coyote.jar 里面
  • 魔神翼 发表于 2013-08-27 10:37

    引用来自“kukaqin”的评论

    引用来自“魔神翼”的评论

    引用来自“kukaqin”的评论

    引用来自“魔神翼”的评论

    求教Tomcat7能运行吗?

    tomcat 7 必须能运行
    但是我找不到javax.websocket在哪个jar文件里面
    在 tomcat 的lib 下的 catalina.jar 和 tomcat-coyote.jar 里面
    好吧,也就是说java本身没有实现websocket
  • kukaqin 发表于 2013-08-29 09:53

    引用来自“魔神翼”的评论

    引用来自“kukaqin”的评论

    引用来自“魔神翼”的评论

    引用来自“kukaqin”的评论

    引用来自“魔神翼”的评论

    求教Tomcat7能运行吗?

    tomcat 7 必须能运行
    但是我找不到javax.websocket在哪个jar文件里面
    在 tomcat 的lib 下的 catalina.jar 和 tomcat-coyote.jar 里面
    好吧,也就是说java本身没有实现websocket
    java sdk 本身为什么要实现webscoket,这不科学呀,就是真要实现,也会在 java ee 的标准里面。java ee 的标准都是由不同的web 容器实现的,tomcat 算是其中一个。
  • silent_lilu 发表于 2013-10-17 10:56
    楼主已经说的很清楚了 要在J2EE7下边才能实现websocket这些注解......
  • liubsh 发表于 2013-11-05 15:59
    为什么我在tomcat 7 下运行没有反应?需要什么配置吗?
  • liubsh 发表于 2013-11-05 16:00

    引用来自“silent_lilu”的评论

    楼主已经说的很清楚了 要在J2EE7下边才能实现websocket这些注解......

    为什么我在tomcat 7 下运行没有反应?需要什么配置吗?
  • liubsh 发表于 2013-11-05 16:13
    tomcat 7 java 7
    WebSocket connection to 'ws://localhost:8080/websocket' failed: Unexpected response code: 404
  • 无即是有 发表于 2013-11-16 14:18

    引用来自“kukaqin”的评论

  • 在本教程中,我们将借助于Java EE的WebSocket(服务器端)实现一个HTML5的WebSocket连接。

    1. 介绍

    HTML5给Web浏览器带来了全双工TCP连接websocket标准服务器的能力。

    换句话说,浏览器能够与服务器建立连接,通过已建立的通信信道来发送和接收数据而不需要由HTTP协议引入额外其他的开销来实现。

    在本教程中我们将在Java EE环境下实现一个简单的websockect服务器端来和客户端进行数据交互。

    本教程需要以下环境:

    1. Ubuntu 12.04
    2. JDK 1.7.0.21
    3. Glassfish 4.0
    : Java EE 7中才引入了WebSocket。
    bigtiger02
    翻译于 3个月前

    1人顶

     翻译的不错哦!

    其它翻译版本(1)

    2. WebSocket服务器端

    让我们定义一个 Java EE websocket服务器端:

    WebSocketTest.java

    01package com.byteslounge.websockets;
    02 
    03import java.io.IOException;
    04 
    05import javax.websocket.OnClose;
    06import javax.websocket.OnMessage;
    07import javax.websocket.OnOpen;
    08import javax.websocket.Session;
    09import javax.websocket.server.ServerEndpoint;
    10 
    11@ServerEndpoint("/websocket")
    12public class WebSocketTest {
    13 
    14  @OnMessage
    15  public void onMessage(String message, Session session)
    16    throws IOException, InterruptedException {
    17   
    18    // Print the client message for testing purposes
    19    System.out.println("Received: " + message);
    20   
    21    // Send the first message to the client
    22    session.getBasicRemote().sendText("This is the first server message");
    23   
    24    // Send 3 messages to the client every 5 seconds
    25    int sentMessages = 0;
    26    while(sentMessages < 3){
    27      Thread.sleep(5000);
    28      session.getBasicRemote().
    29        sendText("This is an intermediate server message. Count: "
    30          + sentMessages);
    31      sentMessages++;
    32    }
    33   
    34    // Send a final message to the client
    35    session.getBasicRemote().sendText("This is the last server message");
    36  }
    37   
    38  @OnOpen
    39  public void onOpen() {
    40    System.out.println("Client connected");
    41  }
    42 
    43  @OnClose
    44  public void onClose() {
    45    System.out.println("Connection closed");
    46  }
    47}
    你可能已经注意到我们从 javax.websocket包中引入了一些类。

    @ServerEndpoint 注解是一个类层次的注解,它的功能主要是将目前的类定义成一个websocket服务器端。注解的值将被用于监听用户连接的终端访问URL地址。

    onOpenonClose 方法分别被@OnOpen@OnClose 所注解。这两个注解的作用不言自明:他们定义了当一个新用户连接和断开的时候所调用的方法。

    onMessage 方法被@OnMessage所注解。这个注解定义了当服务器接收到客户端发送的消息时所调用的方法。注意:这个方法可能包含一个javax.websocket.Session可选参数(在我们的例子里就是session参数)。如果有这个参数,容器将会把当前发送消息客户端的连接Session注入进去。

    本例中我们仅仅是将客户端消息内容打印出来,然后首先我们将发送一条开始消息,之后间隔5秒向客户端发送1条测试消息,共发送3次,最后向客户端发送最后一条结束消息。

    bigtiger02
    翻译于 3个月前

    1人顶

     翻译的不错哦!

    3. 客户端

    现在我们要来写websocket测试应用的客户端:

    page.html

    01<!DOCTYPE html>
    02<html>
    03<head>
    04<title>Testing websockets</title>
    05</head>
    06<body>
    07  <div>
    08    <input type="submit" value="Start" onclick="start()" />
    09  </div>
    10  <div id="messages"></div>
    11  <script type="text/javascript">
    12    var webSocket =
    13      new WebSocket('ws://localhost:8080/byteslounge/websocket');
    14 
    15    webSocket.onerror = function(event) {
    16      onError(event)
    17    };
    18 
    19    webSocket.onopen = function(event) {
    20      onOpen(event)
    21    };
    22 
    23    webSocket.onmessage = function(event) {
    24      onMessage(event)
    25    };
    26 
    27    function onMessage(event) {
    28      document.getElementById('messages').innerHTML
    29        += '<br />' + event.data;
    30    }
    31 
    32    function onOpen(event) {
    33      document.getElementById('messages').innerHTML
    34        = 'Connection established';
    35    }
    36 
    37    function onError(event) {
    38      alert(event.data);
    39    }
    40 
    41    function start() {
    42      webSocket.send('hello');
    43      return false;
    44    }
    45  </script>
    46</body>
    47</html>

    这是一个简单的页面,包含有JavaScript代码,这些代码创建了一个websocket连接到websocket服务器端。

    onOpen 我们创建一个连接到服务器的连接时将会调用此方法。

    onError 当客户端-服务器通信发生错误时将会调用此方法。

    onMessage 当从服务器接收到一个消息时将会调用此方法。在我们的例子中,我们只是将从服务器获得的消息添加到DOM。

    我们连接到websocket 服务器端,使用构造函数 new WebSocket() 而且传之以端点URL:

    ws://localhost:8080/byteslounge/websocket

    super0555
    翻译于 3个月前

    1人顶

     翻译的不错哦!

    4. 测试

    现在我们可以访问测试页面对我们的应用进行测试:

    http://localhost:8080/byteslounge/page.html

    正如所期望的,我们将看到 Connection established 消息:

    http://localhost:8080/byteslounge/page.html

    现在只要我们一按按钮,就会通过此websocket发送初始化报文给服务器,而且接下来会收到发自服务器的测试消息:

    服务器发送、客户端接收的消息

    super0555
    翻译于 3个月前

    0人顶

     翻译的不错哦!

    5. WebSockets 握手

    客户端和服务器端TCP连接建立在HTTP协议握手发生之后。通过HTTP流量调试,很容易观察到握手。客户端一创建一个 WebSocket实例,就会出现如下请求和服务器端响应:

    注意: 我们只录入了WebSocket握手所用到的HTTP头。

    请求:

    GET /byteslounge/websocket HTTP/1.1
    Connection: Upgrade
    Upgrade: websocket
    Sec-WebSocket-Key: wVlUJ/tu9g6EBZEh51iDvQ==

    响应:

    HTTP/1.1 101 Web Socket Protocol Handshake
    Upgrade: websocket
    Sec-WebSocket-Accept: 2TNh+0h5gTX019lci6mnvS66PSY=

    注意:进行连接需要将通过Upgrade and Upgrade将协议升级到支持websocket HTTP头的Websocket协议。服务器响应表明请求被接受,协议将转换到WebSocket协议(HTTP状态码101):

    HTTP/1.1 101 Web Socket Protocol Handshake

    6. 下载源码

    在本页的末尾有范例源代码下载链接,源码在Glassfish 4(需要兼容Java EE 7的服务器)上通过测试。
    在如下地址下载范例源码:



  • 引用来自“魔神翼”的评论

    求教Tomcat7能运行吗?

    tomcat 7 必须能运行
    7.0.43以上版本才支持j2ee7里面的websocket:
    http://tomcat.apache.org/tomcat-7.0-doc/changelog.html
  • 罗盛力 发表于 2013-11-29 11:55
    为了做的更好,我们可以在创建WebSocket对象时候判断浏览器是否支持,如果不支持我们可以引入第三方的SocketJs这个类socket库去做,这两者可以更好的做兼容
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
java.lang.NoClassDefFoundError:javax/el/ExpressionFactory
WebSocket实现简单的web聊天室
J2EE开发环境搭建(宝贝啊)
Java中Websocket使用实例解读 – 码农网
springBoot 整合websocket
java类package包异常 javax.servlet.http.HttpServletRequest can not be resolved?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服