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

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 visionmaster启动失败,提示为“机器不满足授权而被禁用”
  • ¥50 用logisim设计16位单时钟周期cpu
  • ¥15 IDEA中圈复杂度如何具体设置
  • ¥50 labview采集不了数据
  • ¥15 请上面代码做什么处理或什么混淆
  • ¥15 英雄联盟自定义房间置顶
  • ¥15 W5500网线插上无反应
  • ¥15 如何用字典的Key,显示在WPF的xaml中
  • ¥15 weautomate读取Excel表格信息然后填写到网页一直报错,如何解决?
  • ¥15 C#如何在Webview2中获取网页验证码