WebSocket Communication: связь между JavaScript и классом Java
Мое требование как ниже
Шаг 1
- Установить связь WebSocket -> Готово.
- Отправить данные с клиента на сервер -> Готово
- Получение данных с сервера на клиент -> Готово
Шаг 2
- Установить связь WebSocket -> Готово
- Отправлять строковые данные с клиента [jsp/javascript] на сервер
- Строка -> ArrayBuffer на JavaScript -> Готово
- Получить данные о классе Java @ServerEndpoint в Bytebuffer -> Готово
- Как отправить обратно те же данные в браузер ->??
- Как преобразовать данные в строку ->??
Класс Java
@ServerEndpoint("/testwebsocket")
public class WebSocketTest {
@OnMessage
public void onMessage(ByteBuffer bytedata, Session session) throws IOException, InterruptedException {
//session.getBasicRemote().sendText("replay from server for :" + bytedata);
System.out.println("echoBinary: " + bytedata);
String v = new String(bytedata.array(), "UTF-8");
for (byte b : bytedata.array()) {
System.out.print(b);
}
session.getBasicRemote().sendBinary(bytedata);
}
Javascript код для получения
function onMessage(event) {
if (event.data instanceof ArrayBuffer){
alert("onMessage if ");
var strReceived = String.fromCharCode.apply(null, new Uint16Array(event.data));
document.getElementById('messages').innerHTML += '<br />' + 'receieved' + event;
}
else
{
alert("onMessage else ");
document.getElementById('messages').innerHTML += '<br />' + event.data;
} }
Javascript код для отправки
//sending arraybuffer
function bytedata() {
//alert('I am in bytedata');
var str = document.getElementById('bytedataTextFeild').value;
var arrayByte = str2ab(str);
websocket.send(arrayByte);
return false;
}
//creating arraybuffer from string
function str2ab(str) {
//alert('I am in str2ab ' + str);
var buf = new ArrayBuffer(str.length * 2); // 2 bytes for each char
var bufView = new Uint16Array(buf);
for (var i = 0, strLen = str.length; i < strLen; i++) {
bufView[i] = str.charCodeAt(i);
document.getElementById('messages').innerHTML += '<br />'
+ str.charCodeAt(i);
}
return buf;
}
в браузере
Текстовое поле jsp прошло -> Привет
Отправленные данные
72 101 108 108 111
Данные получены
[объект Blob] -> Я хочу это как "Привет"