본문 바로가기

jsp

채팅 애플리케이션: 실시간 채팅 애플리케이션을 개발하는 예제.

반응형

실시간 채팅 애플리케이션은 사용자 간에 실시간으로 메시지를 주고받을 수 있는 웹 애플리케이션입니다. 이를 위해서는 클라이언트와 서버 간의 실시간 연결을 유지하고, 메시지 교환을 원활하게 처리할 수 있는 기술이 필요합니다. 일반적으로 웹 소켓(WebSocket)이나 긴 폴링(Long Polling)과 같은 기술을 사용합니다. 다음은 간단한 실시간 채팅 애플리케이션을 개발하는 두 가지 예제입니다.

예제 : 기본 실시간 채팅 애플리케이션

이 예제에서는 Java의 WebSocket API를 사용하여 기본적인 실시간 채팅 애플리케이션을 구현합니다.

ChatServlet.java (Backend)

import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet;

@ServerEndpoint("/chat")
public class ChatServlet {
    private static Set<Session> sessions = new CopyOnWriteArraySet<>();

    @OnOpen
    public void onOpen(Session session) {
        sessions.add(session);
    }

    @OnClose
    public void onClose(Session session) {
        sessions.remove(session);
    }

    @OnMessage
    public void onMessage(String message, Session session) throws IOException {
        // Broadcast the message to all connected sessions
        for (Session s : sessions) {
            s.getBasicRemote().sendText(message);
        }
    }

    @OnError
    public void onError(Session session, Throwable throwable) {
        // Handle error
    }
}

 

chat.jsp (Frontend)

<!DOCTYPE html>
<html>
<head>
    <title>Simple Chat Application</title>
    <script>
        var ws;

        function connect() {
            ws = new WebSocket("ws://localhost:8080/chat");
            ws.onmessage = function(event) {
                var log = document.getElementById("chatlog");
                log.innerHTML += event.data + "<br/>";
            };
        }

        function sendMessage() {
            var message = document.getElementById("message").value;
            ws.send(message);
        }
    </script>
</head>
<body onload="connect();">
    <div>Chat Log:</div>
    <div id="chatlog" style="height:200px; overflow:auto;"></div>
    <input type="text" id="message">
    <button onclick="sendMessage();">Send</button>
</body>
</html>

Login.jsp & Chat.jsp

  • 유저 로그인 기능을 구현한 Login.jsp 페이지와 위의 Chat.jsp 페이지를 연동합니다.
  • 로그인을 성공한 사용자만 ChatServlet에 접근하고 메시지를 보낼 수 있습니다.

관련 전문용어 설명

  • WebSocket: 실시간 양방향 데이터 전송을 위한 통신 프로토콜입니다. WebSocket을 사용하면 클라이언트와 서버 간에 지속적인 연결을 유지할 수 있습니다.
  • Session: WebSocket 연결에서 단일 사용자의 연결을 나타냅니다. 각 사용자는 고유한 세션을 가집니다.
  • Broadcast: 메시지를 현재 연결된 모든 클라이언트에게 전송하는 것을 의미합니다.

 

반응형