Java Tomcat WebSocket错误

Java Tomcat WebSocket错误,java,tomcat,websocket,Java,Tomcat,Websocket,我遵循这一点使用tomcat制作websocket服务器。 当我试图访问websocket时,我的firefox说它无法建立连接 这是我的密码 public class WsChatServlet extends WebSocketServlet { private static final long serialVersionUID = 1L; private static ArrayList<MyMessageInbound> mmiList = new ArrayList<

我遵循这一点使用tomcat制作websocket服务器。 当我试图访问websocket时,我的firefox说它无法建立连接

这是我的密码

public class WsChatServlet extends WebSocketServlet
{
private static final long serialVersionUID = 1L;
private static ArrayList<MyMessageInbound> mmiList = new ArrayList<MyMessageInbound>();

@Override
protected StreamInbound createWebSocketInbound(String string) {
    System.out.println("CreateWebSocketInbound()");
    return new MyMessageInbound();
}

private class MyMessageInbound extends MessageInbound
{
    WsOutbound myoutbound;

    @Override
    protected void onBinaryMessage(ByteBuffer bb) throws IOException {
        System.out.println("onBinaryMessage()");
    }

    @Override
    protected void onTextMessage(CharBuffer cb) throws IOException {            
        System.out.println("Accept Message : "+ cb);
        for (MyMessageInbound mmib : mmiList)
        {
            CharBuffer buffer = CharBuffer.wrap(cb);
            mmib.myoutbound.writeTextMessage(CharBuffer.wrap("Hello!"));
            mmib.myoutbound.flush();
        }
    }

    @Override
    protected void onOpen(WsOutbound outbound) {
        System.out.println("onOpen()");
        try {
            System.out.println("Open Client.");
            this.myoutbound = outbound;
            mmiList.add(this);
            outbound.writeTextMessage(CharBuffer.wrap("Hello!"));
        } catch (IOException ex) {
            Logger.getLogger(WsChatServlet.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @Override
    protected void onClose(int status) {
        System.out.println("Close Client.");
        mmiList.remove(this);
    } 
}

如何解决此问题以及如何使日志成为内部代码格式?

检查您的tomcat版本。websocket不是标准的,不同的服务器有不同的websocket实现。我曾经将websockets与tomcat一起使用,它过去只与Tomcat7.0.27一起使用。即使是7.0.29也不行。因此,我建议您检查一下是否可以找到您的教程使用的服务器,或者尝试使用不同的版本。

这是Tomcat 7.0.27中的一个错误。我建议您使用7.0.37,或者使用类似的框架(可以避免此类问题)


--Jeanfrancois

如果您发布代码,这将有助于您使用哪个tomcat版本?我建议使用ApacheTomcat7.0.42,它在WebSockets中非常稳定。我使用的是Tomcat7.0.27,实际上我试图实现的是一种从mozilla插件进行通信的方式,该插件使用javascript与现有java代码进行通信。你有没有想过不用websocket就可以实现这一点?+1使用Atmosphere之类的框架,甚至一旦jsr-356上线,你就可以从浏览器和服务器之间支持的最佳协议中获得好处(今年晚些时候,spdy、websocket甚至http/2)
24 Apr 13 22:53:09 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [WsChatServlet] in context with path [/HelloWebSocket] threw exception
java.lang.ClassCastException: org.netbeans.modules.web.monitor.server.MonitorRequestWrapper cannot be cast to org.apache.catalina.connector.RequestFacade
    at org.apache.catalina.websocket.WebSocketServlet.doGet(WebSocketServlet.java:126)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)