Skip to content
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>WebSocket Chat</title>
    <script type="text/javascript">
        var wsChat, wsUppercase, wsLowercase, wsJsonSave;
        // Функция подключения к WebSocket
        function connect() {
            wsChat = new WebSocket('ws://localhost:8080/chat');
            wsUppercase = new WebSocket('ws://localhost:8080/uppercase');
            wsLowercase = new WebSocket('ws://localhost:8080/lowercase');
            wsJsonSave = new WebSocket('ws://localhost:8080/jsonsave');
            wsChat.onmessage = function (event) {
                logMessage('Chat: ' + event.data);
            };
            wsUppercase.onmessage = function (event) {
                logMessage('Uppercase: ' + event.data);
            };
            wsLowercase.onmessage = function (event) {
                logMessage('Lowercase: ' + event.data);
            };
            wsJsonSave.onmessage = function (event) {
                logMessage('Json Save: ' + event.data);
            };
        }
        // Функция для вывода сообщений в textarea
        function logMessage(message) {
            var log = document.getElementById('log');
            log.value += message + '\n';
        }
        // Отправка сообщения в соответствующий WebSocket
        function send() {
            var message = document.getElementById('message').value;
            if (wsChat.readyState === WebSocket.OPEN) {
                wsChat.send(message);
            }
        }
        function sendUp() {
            var message = document.getElementById('message').value;
            if (wsUppercase.readyState === WebSocket.OPEN) {
                wsUppercase.send(message);
            }
        }
        function sendLow() {
            var message = document.getElementById('message').value;
            if (wsLowercase.readyState === WebSocket.OPEN) {
                wsLowercase.send(message);
            }
        }
        // Отправка JSON и получение результата сохранения
        function sendJson() {
            var message = document.getElementById('message').value;
            try {
                // Пытаемся создать JSON из строки
                var json = JSON.parse(message);
                if (wsJsonSave.readyState === WebSocket.OPEN) {
                    wsJsonSave.send(JSON.stringify(json));
                }
            } catch (e) {
                logMessage('Invalid JSON format: ' + message);
            }
        }
        window.onload = function() {
            connect();
        };
    </script>
</head>
<body>
<h1>WebSocket Chat</h1>
<textarea id="log" rows="20" cols="50" readonly></textarea><br/>
<!-- Поле для ввода сообщения в формате JSON -->
<textarea type="text" rows="10" cols="30" id="message" placeholder="Enter your JSON message"></textarea><br/>
<!-- Кнопки для отправки -->
<button onclick="send();">Send</button>
<button onclick="sendUp();">SendUpper</button>
<button onclick="sendLow();">SendLower</button>
<button onclick="sendJson();">SendJson</button>
</body>
</html>

Спасибо за предоставление HTML файла. Это клиентская часть вашего WebSocket приложения. Давайте проанализируем его:

Анализ клиентского кода WebSocket

1. Структура подключений

В приложении создаются четыре различных WebSocket соединения: - Чат: ws://localhost:8080/chat - Преобразование в верхний регистр: ws://localhost:8080/uppercase - Преобразование в нижний регистр: ws://localhost:8080/lowercase - Сохранение JSON: ws://localhost:8080/jsonsave

2. Основные функции

Подключение (connect())

  • Инициализирует все четыре WebSocket соединения
  • Устанавливает обработчики событий для каждого соединения
  • Вызывается автоматически при загрузке страницы

Отправка сообщений

Реализовано четыре метода отправки: - send() - отправка в чат - sendUp() - отправка для преобразования в верхний регистр - sendLow() - отправка для преобразования в нижний регистр - sendJson() - отправка JSON с предварительной валидацией

Обработка сообщений

  • Все входящие сообщения обрабатываются через logMessage()
  • Сообщения отображаются в текстовой области с префиксом, указывающим источник

3. Пользовательский интерфейс

  • Текстовая область для отображения логов
  • Поле ввода для сообщений
  • Четыре кнопки для разных типов отправки

4. Особенности реализации

  • Проверка состояния соединения перед отправкой (readyState === WebSocket.OPEN)
  • Валидация JSON перед отправкой в sendJson()
  • Использование одного поля ввода для всех типов сообщений

5. Потенциальные улучшения

  • Добавление обработки ошибок соединения
  • Реализация переподключения при обрыве связи
  • Добавление индикации статуса соединения
  • Разделение полей ввода для разных типов сообщений

6. Взаимодействие с сервером

Ожидаемые серверные обработчики: 1. ChatHandler - обработка обычных сообщений 2. UpperCaseHandler - преобразование текста в верхний регистр 3. LowerCaseHandler - преобразование текста в нижний регистр 4. JsonSaveHandler - сохранение и обработка JSON данных

Этот файл значительно проясняет структуру вашего приложения. Теперь мы видим, что:

  1. Приложение поддерживает четыре различных типа WebSocket взаимодействий
  2. Используется простой, но эффективный пользовательский интерфейс
  3. Реализована базовая валидация для JSON сообщений

Для полного понимания работы приложения было бы полезно увидеть: 1. Реализацию серверных обработчиков 2. Любые модели данных, используемые в приложении 3. Конфигурацию сервера (если есть дополнительная)