ErrorCode1005 2016-11-05 03:46 采纳率: 50%
浏览 5434
已采纳

Javaweb使用websocket时候产生404错误,后台无报错

web服务器:tomcat8,用eclipse开发,导入了websocket需要的jar包,建立连接成功,但是在后台终端向前台发送数据时候,出现
Uncaught TypeError: Cannot set property 'onmessage' of null

已经查阅网上各种有关资料了,依然不能解决这个问题,希望大神帮忙看下哪里出问题了。下面贴出代码

前端代码:

 <script type="text/javascript">
        //建立websocket对象
        var chat={};
        chat.socket=null;
        var uname='<%=request.getSession().getAttribute("uname")%>';
        function conn() {
            //执行建立连接
            connect("ws://localhost:8085/chat/begin?uname="+uname);
            chat.socket.onmessage=function(event){
                console.log(event.data)
            }
        }

        function connect(host){
            if("WebSocket" in window){
                socket=new WebSocket(host);
            }else if("MoWebSocket" in window){
                socket=new MoWebSocket(host);
            }else{
                console.log("当前浏览器不支持socket");
                return;
            }
        }
    </script>

后台终端代码:

 @ServerEndpoint("/begin")
public class ChatServer {
    Session session;
    private String uname;
    private static Map<String,ChatServer> member=new HashMap<String,ChatServer>();

    @OnOpen
    public void start(Session session){
        this.session=session;
        String []art=session.getQueryString().split("=");
        System.out.println(art[1]);
        if(art.length>=2){
            this.uname=art[1];
            member.put(uname, this);

        }
    }

    private void welcome(){
        for(ChatServer mem: member.values()){

            if(mem==this){
                this.send("欢迎您登录成功");
            }else{

                mem.send("欢迎"+this.uname+"登录");
            }
        }

    }

    private void send(String message){

        try {
            session.getBasicRemote().sendText(message);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

ServerApplicationConfig:

 public class Scanner implements ServerApplicationConfig{

    @Override
    public Set<Class<?>> getAnnotatedEndpointClasses(Set<Class<?>> arg0) {
        return arg0;
    }

    @Override
    public Set<ServerEndpointConfig> getEndpointConfigs(Set<Class<? extends Endpoint>> arg0) {
        return null;
    }

}
  • 写回答

1条回答 默认 最新

  • 毕小宝 博客专家认证 2016-11-05 06:15
    关注

    首先,你看下这个websocket请求响应的内容是什么呢?前段调试模式下看看network这个请求响应内容。
    其次,从js错误信息来看,你的js代码有问题chat.socket这个属性没有赋值,应该是在你的connect操作时创建socket对象,然后赋值给这个属性才对。
    有问题再联系,刚好我也做过websocket通信的简单运用。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示