Tìm kiếm trang web

java - Websocket Tomcat không hoạt động


Tôi đã thử một đoạn mã mẫu websocket như dưới đây, trình duyệt của tôi hỗ trợ websocket HTML 5, nhưng đoạn mã mẫu dưới đây luôn hiển thị "Close" trong javascript. Chuyện gì đã xảy ra với mã?

websocket.java

 @WebServlet("/websocket")
    public class websocket extends WebSocketServlet {
        private static final long serialVersionUID = 1L;

        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.getWriter().println("welcome to websocket 2");
            response.getWriter().flush();   
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

    @Override
    protected StreamInbound createWebSocketInbound(String arg0,
            HttpServletRequest arg1) {

        return new TheWebSocket();
    }

    private class TheWebSocket extends MessageInbound
    {
        private WsOutbound outbound;

        @Override
        public void onOpen( WsOutbound outbound )
        {
            this.outbound = outbound;
             System.out.println("socket opened!");
        }

        @Override
        public void onTextMessage( CharBuffer buffer ) throws IOException
        {
            try
            {
                    outbound.writeTextMessage( CharBuffer.wrap( "abc testing".toCharArray() ) );
                    System.out.println("Message sent from server.");
            }
            catch ( IOException ioException )
            {
                    System.out.println("error opening websocket");
            }

        }

        @Override
        protected void onBinaryMessage(ByteBuffer arg0) throws IOException {
            // TODO Auto-generated method stub

        }
    }

}

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"  
    pageEncoding="UTF-8"%>  
<!DOCTYPE html>  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>Index</title>  
<script type="text/javascript">  
var ws = null;  
function startWebSocket() {  
    if ('WebSocket' in window)  
        ws = new WebSocket("ws://localhost:8080/web_test/websocket");  
    else if ('MozWebSocket' in window)  
        ws = new MozWebSocket("ws://localhost:8080/web_test/websocket");  
    else  
        alert("not support");  


    ws.onmessage = function(evt) {  
        alert(evt.data);  
    };  

    ws.onclose = function(evt) {  
        alert("close");  
    };  

    ws.onopen = function(evt) {  
        alert("open");  
    };  
}  

function sendMsg() {  
    ws.send(document.getElementById('writeMsg').value);  
}  
</script>  
</head>  
<body onload="startWebSocket();">  
<input type="text" id="writeMsg"></input>  
<input type="button" value="send" onclick="sendMsg()"></input>  
</body>  
</html>  

Khi tôi kết nối tới "http://localhost:8080/web_test/websocket", tôi nhận được thông điệp đúng là "welcome to websocket 2". Và tập tin index.jsp của tôi nằm trong thư mục gốc sau web_test. Vì vậy, việc triển khai của tôi nên là ổn, nhưng có điều gì đó sai. Tôi chỉ không thể tìm ra.

Câu trả lời #1

Bình luận hoặc xóa hai phương thức này khỏi mã servlet của bạn và sau đó thử websocket sẽ hoạt động bình thường. Nếu hai phương thức này có trong servlet, websocket sẽ chuyển sang trạng thái đóng

protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().println("welcome to websocket 2");
        response.getWriter().flush();
    }

    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }