qq_40235725
大大大大涛
采纳率0%
2017-11-16 02:44 阅读 2.6k

Websocket通过注解连不上service

用了好的办法就是死活打印不出来service里面的值,使用别的controller可以打印出来service里面的东西
package com.xinhaiwang.controller;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.CopyOnWriteArraySet;

import javax.servlet.http.HttpServletRequest;
import javax.websocket.CloseReason;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;

import org.springframework.beans.factory.annotation.Autowired;

import com.xinhaiwang.service.MklService;

@ServerEndpoint("/echo")
public class Websocket {
@Autowired
private MklService mklservice;
/*private MklService mklservice=(MklService) ContextLoader.getCurrentWebApplicationContext().getBean("mklservice");*/
//concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。若要实现服务端与单一客户端通信的话,可以使用Map来存放,其中Key可以为用户标识

private static CopyOnWriteArraySet webSocketSet = new CopyOnWriteArraySet();

//与某个客户端的连接会话,需要通过它来给客户端发送数据

private Session session;

@OnOpen
public void onOpen(Session session) throws IOException {
System.out.println("onOpen");
this.session = session;

webSocketSet.add(this); //加入set中

System.out.println("有新连接加入!");
//以下代码省略...
}
@OnMessage
public String onMessage(String message) throws Exception {
System.out.println("onMessage");
System.out.println("验证连通性:");
/* DmzController dmz = new DmzController();
System.out.println(dmz.mkl());
mklservice.getCount();*/
//向前端传送消息
return "77777";
//以下代码省略...
}
/*@OnMessage(maxMessageSize=6)
public void receiveMessage(String message) {
System.out.println("receiveMessage");
System.out.println("来自客户端的消息:" + message);

//以下代码省略...
}*/
@OnError
public void onError(Throwable t) {
System.err.println("onError");
//以下代码省略...
}

 @OnClose
 public void onClose(Session session, CloseReason reason) {
     System.err.println("onClose");

 //以下代码省略...
 } 
 public void sendMessage(String message) throws IOException{ 
        //调用写好的方法向前端发起请求并一块传值
        this.session.getBasicRemote().sendText(message);  
        //this.session.getAsyncRemote().sendText(message);  
    }

/**
 * 获取数组
 * @throws Exception 
 */

    public String getbean() throws Exception{
        System.out.println("进入到自定义方法");
        //判断时间
         Map<String, Object>map = new HashMap<>();
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
        String now = df.format(new Date());

        String time = "2017-11-19 11:00:00";
        System.out.println("获取当前系统时间"+now);// new Date()为获取当前系统时间
        System.out.println("获取自定义时间"+time);//获取自定义时间
        /*System.out.println("总条数"+service.getCount());*/
        String sjh[] = new String[10];
        map.put("data", sjh);
        //判断是否到抽奖时间
        System.out.println("判断时间:"+!now.equals(time));
        mklservice.getCount();
        System.out.println("获取总条数"+mklservice.getCount());
        /*if(!now.equals(time)){
            //查到中奖的手机号做成数组(加个 判断数组.length是否等于十)
                for (int i = 0; i < 10; i++) {
                    //生成随机数作为id
                    boolean a = true;
                    Integer x=(int)(Math.random()*100);
                    while (a) {
                        System.out.println("随机数:"+x);
                        Integer id = mklservice.getCount();
                        System.out.println("总条数"+id);
                        if(id<x){
                            a = true;
                        }else{
                            a = false;
                            Mkl mkl = mklservice.getbean(x);
                            sjh[i]=mkl.getPhone();
                            mkl.setYuliu1("1");
                        }

                    }
                }
            map.put("data", sjh);
        }*/
            return "";
    }
}
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

7条回答 默认 最新

  • meng20166 乐古 2017-11-16 03:11

    可能是你的MklService 没有加注解@Service

    点赞 评论 复制链接分享
  • xiaoyan_master xiaoyan_master 2017-11-16 03:57

    页面url是不是写错了 要加项目名

    点赞 评论 复制链接分享
  • qq_40235725 大大大大涛 2017-11-16 07:20

    这个没有可以连接上前端页面就是调用service时候出问题了

    点赞 评论 复制链接分享
  • qq_40235725 大大大大涛 2017-11-16 07:23

    别的controller都可以调用同一个service来获取值唯独这个Websocket得不到,并且Websocket可以调用controller方法但只要运行到service得值就停了

    点赞 评论 复制链接分享
  • qq_40235725 大大大大涛 2017-11-21 06:11

    最后的解决办法是封装成一个类然后在Websocket进行调用

    点赞 评论 复制链接分享
  • u010919083 霍先生的虚拟宇宙网络 2018-02-27 07:55

    这里有个文章可以解决这个问题。
    http://blog.csdn.net/u010919083/article/details/79388720

    点赞 评论 复制链接分享
  • qq_34808006 qq_34808006 2018-12-17 02:10

    websocket里是通过反射实例化对象的,要把注解的服务设置成静态单列

    点赞 评论 复制链接分享

相关推荐