websocket 테스트시 eclipse오류 발생.
환경 : win7 32bit
jdk : 1.8.0
tomcat : 7.0.72
IDE : eclipse
웹소켓이라는것을 처음 접해봅니다.
사실 자바도 거의 처음입니다.. 계속 C랑 C++만 하다가..이번에 맡게된 프로그램이 자바로 되어 있어..후..
무튼...
웹소켓이 어떻게 돌아가느냐.. 기본적인걸 좀 보기 위해 아주아주 심플한 예제를 하나 돌려보았습니다.
http://nowonbun.tistory.com/285
위의 블로그의 내용을 참조 하였고
있는 그대로 가져다 썼습니다.
WebSocket.java
import javax.websocket.OnClose; import javax.websocket.OnError; import javax.websocket.OnMessage; import javax.websocket.OnOpen; import javax.websocket.server.ServerEndpoint; @ServerEndpoint("/WebSocket") public class WebSocket { @OnOpen public void handleOpen() { System.out.println("Client is connected."); } @OnMessage public String handleMessage(String message) { System.out.println("Receive from Client : " + message); String replyMessage = "echo : " + message; System.out.println("Send to Client : " + replyMessage); return replyMessage; } @OnClose public void handleClose() { System.out.println("Client is disconnected"); } @OnError public void handleError(Throwable t) { t.printStackTrace(); } }
websocket.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title> Insert title here </title> </head> <body> <form> <input id="textMessage" type="text"> <input onclick="sendMessage()" value="Send" type="button"> <input onclick="disconnect()" value="Disconnect" type="button"> </form> <br/> <textarea id="messageTextArea" rows="10" cols="50"></textarea> <script type="text/javascript"> var webSocket = new WebSocket("ws://localhost:8080/websockettest/WebSocket"); var messageTextArea = document.getElementById("messageTextArea"); webSocket.onopen = function(message) { messageTextArea.value += "Server connect...\n"; }; webSocket.onclose = function(message) { messageTextArea.value += "Server disconnect...\n"; }; webSocket.onmessage = function(message) { messageTextArea.value += "Receive from server = " + message.data + "\n"; }; function sendMessage() { var message = document.getElementById("textMessage"); messageTextArea.value += "Send to Server = " + message.value + "\n"; webSocket.send(message.value); message.value=""; } function disconnect() { webSocket.close(); } </script> </body> </html>
위 2가지 파일이 다 입니다.
(테스트용 PC랑 현재 이 포스트를 작성하는 PC가 망이분리 되있어
ctrl c / ctrl v 가 되지 않아 코드를 일일이 새로 손으로 친거라 약간의 오타가 있을 수 도 있습니다.)
그리고 실제로 구동 해 보면
서버에서 잘 돌아간 후
브라우저를 통해 http://localhost:8080/websockettest/websocket.jsp 를 접속 하면
(프로젝트 명이 websockettest 입니다)
org.apache.coyote.http11.Abstracthttp11Processor process
정보 : Error parsing HTTP request header
라는 에러가 나오며
조금 밑에
java.lang.ArrayIndexOutOfBoundsException 도 발생 합니다.
일단, 저 위 코드에 Array는 없고, 내부적으로 다른 곳에서 사용 되는거 같은데
org.apache.coyote.http11.InternalInputBuffer.parseReqestLine(InternalInputBuffer.java:134)
해당 java 파일의 소스가 없고.. class만 있어서 추적도 못하겠구요..
무튼.. 저 위의 에러 원인이 뭘까요?
구글링 해서
server.xml 부분에 뭘 주석 처리 해라
maxHttpHeaderSize 를 지정해줘라
접속 포트를 바꿔줘라
등을 해 보았지만 계속 같은 증상입니다.
오늘 오후시간 내내 계속 여기서 막혀 있습니다 ㅠㅠ
이에 의심가는 부분이 있으시거나
문제를 아시는 분은 답변 부탁 드리겠습니다.
감사합니다.
-
해결 했습니다. 브라우저 문제였네요..
사파리랑 파폭에선 저런 에러 나고, 크롬에선 되고..
웹소켓 지원하는 브라우저 ( http://caniuse.com/#search=websocket )
에서만 테스트 했는데도.. 브라우저 차이가 있네요..
댓글 달기