刘洪青 | 6266f99 | 2017-05-15 21:21:03 +0800 | [diff] [blame^] | 1 | <?xml version="1.0" encoding="UTF-8"?>
|
| 2 | <!--
|
| 3 | Licensed to the Apache Software Foundation (ASF) under one or more
|
| 4 | contributor license agreements. See the NOTICE file distributed with
|
| 5 | this work for additional information regarding copyright ownership.
|
| 6 | The ASF licenses this file to You under the Apache License, Version 2.0
|
| 7 | (the "License"); you may not use this file except in compliance with
|
| 8 | the License. You may obtain a copy of the License at
|
| 9 |
|
| 10 | http://www.apache.org/licenses/LICENSE-2.0
|
| 11 |
|
| 12 | Unless required by applicable law or agreed to in writing, software
|
| 13 | distributed under the License is distributed on an "AS IS" BASIS,
|
| 14 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 15 | See the License for the specific language governing permissions and
|
| 16 | limitations under the License.
|
| 17 | -->
|
| 18 | <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
| 19 | <head>
|
| 20 | <title>Apache Tomcat WebSocket Examples: Echo</title>
|
| 21 | <style type="text/css"><![CDATA[
|
| 22 | #connect-container {
|
| 23 | float: left;
|
| 24 | width: 400px
|
| 25 | }
|
| 26 |
|
| 27 | #connect-container div {
|
| 28 | padding: 5px;
|
| 29 | }
|
| 30 |
|
| 31 | #console-container {
|
| 32 | float: left;
|
| 33 | margin-left: 15px;
|
| 34 | width: 400px;
|
| 35 | }
|
| 36 |
|
| 37 | #console {
|
| 38 | border: 1px solid #CCCCCC;
|
| 39 | border-right-color: #999999;
|
| 40 | border-bottom-color: #999999;
|
| 41 | height: 170px;
|
| 42 | overflow-y: scroll;
|
| 43 | padding: 5px;
|
| 44 | width: 100%;
|
| 45 | }
|
| 46 |
|
| 47 | #console p {
|
| 48 | padding: 0;
|
| 49 | margin: 0;
|
| 50 | }
|
| 51 | ]]></style>
|
| 52 | <script type="application/javascript"><![CDATA[
|
| 53 | var ws = null;
|
| 54 |
|
| 55 | function setConnected(connected) {
|
| 56 | document.getElementById('connect').disabled = connected;
|
| 57 | document.getElementById('disconnect').disabled = !connected;
|
| 58 | document.getElementById('echo').disabled = !connected;
|
| 59 | }
|
| 60 |
|
| 61 | function connect() {
|
| 62 | var target = document.getElementById('target').value;
|
| 63 | if (target == '') {
|
| 64 | alert('Please select server side connection implementation.');
|
| 65 | return;
|
| 66 | }
|
| 67 | if ('WebSocket' in window) {
|
| 68 | ws = new WebSocket(target);
|
| 69 | } else if ('MozWebSocket' in window) {
|
| 70 | ws = new MozWebSocket(target);
|
| 71 | } else {
|
| 72 | alert('WebSocket is not supported by this browser.');
|
| 73 | return;
|
| 74 | }
|
| 75 | ws.onopen = function () {
|
| 76 | setConnected(true);
|
| 77 | log('Info: WebSocket connection opened.');
|
| 78 | };
|
| 79 | ws.onmessage = function (event) {
|
| 80 | log('Received: ' + event.data);
|
| 81 | };
|
| 82 | ws.onclose = function (event) {
|
| 83 | setConnected(false);
|
| 84 | log('Info: WebSocket connection closed, Code: ' + event.code + (event.reason == "" ? "" : ", Reason: " + event.reason));
|
| 85 | };
|
| 86 | }
|
| 87 |
|
| 88 | function disconnect() {
|
| 89 | if (ws != null) {
|
| 90 | ws.close();
|
| 91 | ws = null;
|
| 92 | }
|
| 93 | setConnected(false);
|
| 94 | }
|
| 95 |
|
| 96 | function echo() {
|
| 97 | if (ws != null) {
|
| 98 | var message = document.getElementById('message').value;
|
| 99 | log('Sent: ' + message);
|
| 100 | ws.send(message);
|
| 101 | } else {
|
| 102 | alert('WebSocket connection not established, please connect.');
|
| 103 | }
|
| 104 | }
|
| 105 |
|
| 106 | function updateTarget(target) {
|
| 107 | if (window.location.protocol == 'http:') {
|
| 108 | document.getElementById('target').value = 'ws://' + window.location.host + target;
|
| 109 | } else {
|
| 110 | document.getElementById('target').value = 'wss://' + window.location.host + target;
|
| 111 | }
|
| 112 | }
|
| 113 |
|
| 114 | function log(message) {
|
| 115 | var console = document.getElementById('console');
|
| 116 | var p = document.createElement('p');
|
| 117 | p.style.wordWrap = 'break-word';
|
| 118 | p.appendChild(document.createTextNode(message));
|
| 119 | console.appendChild(p);
|
| 120 | while (console.childNodes.length > 25) {
|
| 121 | console.removeChild(console.firstChild);
|
| 122 | }
|
| 123 | console.scrollTop = console.scrollHeight;
|
| 124 | }
|
| 125 |
|
| 126 |
|
| 127 | document.addEventListener("DOMContentLoaded", function() {
|
| 128 | // Remove elements with "noscript" class - <noscript> is not allowed in XHTML
|
| 129 | var noscripts = document.getElementsByClassName("noscript");
|
| 130 | for (var i = 0; i < noscripts.length; i++) {
|
| 131 | noscripts[i].parentNode.removeChild(noscripts[i]);
|
| 132 | }
|
| 133 | }, false);
|
| 134 | ]]></script>
|
| 135 | </head>
|
| 136 | <body>
|
| 137 | <div class="noscript"><h2 style="color: #ff0000">Seems your browser doesn't support Javascript! Websockets rely on Javascript being enabled. Please enable
|
| 138 | Javascript and reload this page!</h2></div>
|
| 139 | <div>
|
| 140 | <div id="connect-container">
|
| 141 | <div>
|
| 142 | <span>Connect to service implemented using:</span>
|
| 143 | <!-- echo example using new programmatic API on the server side -->
|
| 144 | <input id="radio1" type="radio" name="group1" value="/examples/websocket/echoProgrammatic"
|
| 145 | onclick="updateTarget(this.value);"/> <label for="radio1">programmatic API</label>
|
| 146 | <!-- echo example using new annotation API on the server side -->
|
| 147 | <input id="radio2" type="radio" name="group1" value="/examples/websocket/echoAnnotation"
|
| 148 | onclick="updateTarget(this.value);"/> <label for="radio2">annotation API</label>
|
| 149 | </div>
|
| 150 | <div>
|
| 151 | <input id="target" type="text" size="40" style="width: 350px"/>
|
| 152 | </div>
|
| 153 | <div>
|
| 154 | <button id="connect" onclick="connect();">Connect</button>
|
| 155 | <button id="disconnect" disabled="disabled" onclick="disconnect();">Disconnect</button>
|
| 156 | </div>
|
| 157 | <div>
|
| 158 | <textarea id="message" style="width: 350px">Here is a message!</textarea>
|
| 159 | </div>
|
| 160 | <div>
|
| 161 | <button id="echo" onclick="echo();" disabled="disabled">Echo message</button>
|
| 162 | </div>
|
| 163 | </div>
|
| 164 | <div id="console-container">
|
| 165 | <div id="console"/>
|
| 166 | </div>
|
| 167 | </div>
|
| 168 | </body>
|
| 169 | </html> |