intellij 를 이용하여 웹소켓 서버를 구축해보도록 할께요.
.새 프로젝트 시작
Create New Project

.초기설정
- Spring MVC
- Web Application > WebServices

.프로젝트 이름 설정
WebSocket Server 로 설정

우측 하단 Finish 클릭
.웹소켓 사용하기 위한 javax webSocket 설치


.패키지 추가
ChatServer


.java Class 추가
ChatServer

ChatServer.java import javax.websocket.*; import javax.websocket.server.ServerEndpoint; import java.io.IOException; import java.util.HashMap; import java.util.Map; @ServerEndpoint("/ws") public class ChatServer { private Map<String, String> usernames = new HashMap<String, String>(); @OnOpen public void open(Session session) throws IOException, EncodeException { session.getBasicRemote().sendText("(Server) hello"); } @OnClose public void close(Session session) throws IOException, EncodeException { String userId = session.getId(); if(usernames.containsKey(userId)) { String username = usernames.get(userId); for(Session peer : session.getOpenSessions()) peer.getBasicRemote().sendText("(Server): "+username+" left the chat room."); } } @OnMessage public void handleMessage(String message, Session session) throws IOException, EncodeException { String userId = session.getId(); if (usernames.containsKey(userId)) { String username = usernames.get(userId); for (Session peer : session.getOpenSessions()) peer.getBasicRemote().sendText("(" + username + "): " + message); } else { if (usernames.containsValue(message) || message.toLowerCase().equals("server")) session.getBasicRemote().sendText("(Server): That username is already in use. Please try again."); else { usernames.put(userId, message); session.getBasicRemote().sendText("(Server): Welcome, " + message + "!"); for (Session peer : session.getOpenSessions()) if (!peer.getId().equals(userId)) peer.getBasicRemote().sendText("(Server): " + message + " joined the chat room."); } } } }
index.jsp <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Chat</title> </head> <body style="margin:0;"> <textarea title="Chat Log" id="log" readonly style="display: block; width: 100%; height: 600px; resize: none; margin: 0; padding: 0; border: 0;"></textarea> <input title="Chat Input" id="input" type="text" style="display: block; width: 100%; border-width: 1px 0 1px 0;" autofocus/> <script> var ws = new WebSocket("ws://localhost:8080/ws"); ws.onmessage = function (event) { console.log(event.data); document.getElementById("log").value += "[" + timestamp() + "] " + event.data + "\n"; } document.getElementById("input").addEventListener("keyup", function (event) { if (event.keyCode === 13) { ws.send(event.target.value); event.target.value = ""; } }); function timestamp() { var d = new Date(), minutes = d.getMinutes(); if (minutes < 10) minutes = '0' + minutes; return d.getHours() + ':' + minutes; } </script> </body> </html>
.톰캣 설정



.톰캣 실행

.이슈
톰캣 시작시 에러 Artifact websocket:war exploded: Error during artifact deployment. See server log for details.

web/WEB-INF/web.xml 내용을 지우고 아래것만 남김 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> </web-app>
.완료

'프로그래밍 > Java' 카테고리의 다른 글
인텔리제이 (intellij) 스프링 부트(Spring Boot) 시작하기 (0) | 2021.11.12 |
---|---|
mac 인텔리제이(intellij) 스프링부트(spring boot) 포트에러 발생시 Port 8080 was aleady in use (0) | 2021.11.12 |
Spring boot + swagger 예제 (0) | 2020.12.04 |
Double 형 데이터 지수 표현 제거 (0) | 2020.11.03 |
[JAVA] Double 형 데이터 지수 표현 제거 방법 (0) | 2020.10.29 |