最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - tomcat 7.0.50 java websocket implementation gives 404 error - Stack Overflow

programmeradmin1浏览0评论

I am trying to implement a websocket on tomcat 7.0.50 using annotated endpoints as specified in Java Websocket API (1.0)- JSR 356. Following are the brief steps how I have coded it 1) Write a websocket endpoint using @ServerEndpoint annotation 2) implement @onOpen and @onMessage methods 3) open a websocket using javascript on google chrome.

Please find code corresponding to above steps in order

1) STEP 1 & 2 - writing websocket server endpoint:

        package com.jkweb.websocket;

       import java.io.IOException;
       import java.util.HashMap;
       import java.util.List;
       import java.util.Map;

       import javax.websocket.EndpointConfig;
       import javax.websocket.OnMessage;
       import javax.websocket.OnOpen;
       import javax.websocket.Session;
       import javax.websocket.server.PathParam;
       import javax.websocket.server.ServerEndpoint;

       import org.slf4j.Logger;
       import org.slf4j.LoggerFactory;

  @ServerEndpoint(value="/websocket/fileuploadtracker")

@OnOpen 
public void open(Session session,EndpointConfig config) {
    ......
}
@OnMessage
public void onMessage(Session session, String msg) {
    try {
        session.getBasicRemote().sendText(msg);
    } catch (IOException e) {
        logger.error(e.getMessage());
    }
}

public static void sendMessage(String uniqueTocken,String msg){
    try {
        Session wsSession = socketConnectionMap.get(uniqueTocken);
        wsSession.getBasicRemote().sendText(msg);
    } catch (IOException e) {
        logger.error(e.getMessage());
    }
}

}

2) STEP 3 - opening websocket using javascript api in chrome:

      wsurl =  "ws://localhost:8080/jkweb/websocket/fileuploadtracker",
        ws; 
        ws = new WebSocket(wsurl);
         ws.onopen = function()
         {
            // Web Socket is connected, send data using send()
            ws.send("Sending first Message");
            alert("Message is sent...");
         };
         ws.onmessage = function (evt) 
         { 
            var received_msg = evt.data;
            alert("Message is received...");
         };
         ws.onclose = function(evt)
         { 
            // websocket is closed.
            alert("Connection is closed..."+evt.code + ":"+evt.reason ); 
         };        

I am using following versions of softwares : 1) Tomcat - 7.0.50 2) Java - 1.7.45 3) Servlet - 3.0 4) Have included following Maven dependency 5) Chrome - 32.0.1700.107m

     <dependency>
     <groupId>javax.websocket</groupId>
     <artifactId>javax.websocket-api</artifactId>
     <version>1.0</version>
         <scope>provided</scope>
</dependency>   

However I am getting following error and connection is closed with 1066 error code in chrome's console:

      WebSocket connection to 'ws://localhost:8080/jkweb/websocket/fileuploadtracker' failed: Error during WebSocket handshake: Unexpected response code: 404

Is there any configuration I am missing out on. I tried to search a lot but couldn't find anything. Please I need this to be solved ASAP.

I am trying to implement a websocket on tomcat 7.0.50 using annotated endpoints as specified in Java Websocket API (1.0)- JSR 356. Following are the brief steps how I have coded it 1) Write a websocket endpoint using @ServerEndpoint annotation 2) implement @onOpen and @onMessage methods 3) open a websocket using javascript on google chrome.

Please find code corresponding to above steps in order

1) STEP 1 & 2 - writing websocket server endpoint:

        package com.jkweb.websocket;

       import java.io.IOException;
       import java.util.HashMap;
       import java.util.List;
       import java.util.Map;

       import javax.websocket.EndpointConfig;
       import javax.websocket.OnMessage;
       import javax.websocket.OnOpen;
       import javax.websocket.Session;
       import javax.websocket.server.PathParam;
       import javax.websocket.server.ServerEndpoint;

       import org.slf4j.Logger;
       import org.slf4j.LoggerFactory;

  @ServerEndpoint(value="/websocket/fileuploadtracker")

@OnOpen 
public void open(Session session,EndpointConfig config) {
    ......
}
@OnMessage
public void onMessage(Session session, String msg) {
    try {
        session.getBasicRemote().sendText(msg);
    } catch (IOException e) {
        logger.error(e.getMessage());
    }
}

public static void sendMessage(String uniqueTocken,String msg){
    try {
        Session wsSession = socketConnectionMap.get(uniqueTocken);
        wsSession.getBasicRemote().sendText(msg);
    } catch (IOException e) {
        logger.error(e.getMessage());
    }
}

}

2) STEP 3 - opening websocket using javascript api in chrome:

      wsurl =  "ws://localhost:8080/jkweb/websocket/fileuploadtracker",
        ws; 
        ws = new WebSocket(wsurl);
         ws.onopen = function()
         {
            // Web Socket is connected, send data using send()
            ws.send("Sending first Message");
            alert("Message is sent...");
         };
         ws.onmessage = function (evt) 
         { 
            var received_msg = evt.data;
            alert("Message is received...");
         };
         ws.onclose = function(evt)
         { 
            // websocket is closed.
            alert("Connection is closed..."+evt.code + ":"+evt.reason ); 
         };        

I am using following versions of softwares : 1) Tomcat - 7.0.50 2) Java - 1.7.45 3) Servlet - 3.0 4) Have included following Maven dependency 5) Chrome - 32.0.1700.107m

     <dependency>
     <groupId>javax.websocket</groupId>
     <artifactId>javax.websocket-api</artifactId>
     <version>1.0</version>
         <scope>provided</scope>
</dependency>   

However I am getting following error and connection is closed with 1066 error code in chrome's console:

      WebSocket connection to 'ws://localhost:8080/jkweb/websocket/fileuploadtracker' failed: Error during WebSocket handshake: Unexpected response code: 404

Is there any configuration I am missing out on. I tried to search a lot but couldn't find anything. Please I need this to be solved ASAP.

Share Improve this question edited Oct 31, 2017 at 13:07 alseether 1,9932 gold badges26 silver badges41 bronze badges asked Feb 18, 2014 at 11:32 Shailesh VaishampayanShailesh Vaishampayan 1,7965 gold badges24 silver badges52 bronze badges
Add a comment  | 

3 Answers 3

Reset to default 13

I have solved it. Problem was very specific to my installation. I had the websocket api .jar being installed in my app's WEB-INF/lib directory as well. Not sure why it was breaking it. can you put some light on the root cause of this behaviour and why it doesn't work when you gave websocket-api.jar in application's WEB-INF/lib along with tomcat's lib?

If you used tomcat server which was created in eclipse, you should delete the old server and create a new one with tomcat 7.0.50. This is my solution. PS: My tomcat server is 7.0.53, and the old one is 7.0.21. Good luck to you~

I also had the same problem. Try removing the unwanted jars which contains websocket in your $JAVA_HOME/lib folder. and then add only

发布评论

评论列表(0)

  1. 暂无评论