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

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 java代码写在记事本上后在cmd上运行时无报错但又没生成文件
  • ¥15 关于#python#的问题:在跑ldsc数据整理的时候一直抱这种错误,要么--out识别不了参数,要么--merge-alleles识别不了参数(操作系统-linux)
  • ¥15 PPOCRLabel
  • ¥15 混合键合键合机对准标识
  • ¥100 现在不懂的是如何将当前的相机中的照片,作为纹理贴图,映射到扫描出的模型上
  • ¥15 魔霸ROG7 pro,win11.息屏后会显示黑屏,如图,如何解决?(关键词-重新启动)
  • ¥15 有没有人知道这是哪里出了问题啊?要怎么改呀?
  • ¥200 C++表格文件处理-悬赏
  • ¥15 Windows Server2016本地登录失败
  • ¥15 复合卡卡号轨道写入芯片卡