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 |