之前的项目是利用servlet写的,在websocket直接是实例化service,改成ssm时,service无法自动装配到websocket中。利用一下办法解决:
//UserService为你要注入的接口
UserService userService = (UserService) ContextLoader.getCurrentWebApplicationContext().getBean("userService");
全部配置如下:
@ServerEndpoint(value="/echo")
@Component
public class EchoSocket {
//你要注入的service或者dao
private UserService userService;
private static List<Friend> list = new ArrayList<Friend>();
private static Map<Integer, Session> map = new HashMap<Integer, Session>();
@OnOpen
public void open(Session session) throws Exception{
//此处为关键
userService = (UserService) ContextLoader.getCurrentWebApplicationContext().getBean("userService");
String queryString = session.getQueryString();
String urluserid = queryString.split("=")[1];
int myid = Integer.valueOf(urluserid);
map.put(myid, session);
list = userService.makefriendinfo(myid);
if(list!=null){
for (Friend friend : list) {
User user = userService.getUserById(friend.getMyid());
String str = Friend.getJson(user);
try {
map.get(friend.getFriendid()).getBasicRemote().sendText(str);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
@OnMessage
public void message(Session session,String msg) throws Exception{
userService = (UserService) ContextLoader.getCurrentWebApplicationContext().getBean("userService");
JSONObject jsonObject = JSON.parseObject(msg);
String urluserid = jsonObject.getString("urluserid");
String flag = jsonObject.getString("flag");
String zhuid = jsonObject.getString("zhuid");
String oobo = jsonObject.getString("oobo");
if(oobo!=null){
list = userService.makefriendinfo(Integer.valueOf(zhuid));
if(list!=null){
for (Friend friend : list) {
User user = userService.getUserById(friend.getMyid());
String str = Friend.getJson(user);
try {
if(map.get(friend.getFriendid())!=null){
map.get(friend.getFriendid()).getBasicRemote().sendText(str);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
if(oobo==null){
if(flag.equals("1")){
Session s = map.get(Integer.valueOf(zhuid));
if(s!=null){
Friend f = new Friend();User user = userService.getUserById(Integer.valueOf(urluserid));
f.setReciver("添加"+user.getUsername()+"成功");f.setKey(true);
f.setMyid(Integer.valueOf(zhuid));f.setFriendid(Integer.valueOf(urluserid));
try {
s.getBasicRemote().sendText(Friend.toJson(f));
} catch (IOException e) {
e.printStackTrace();
}
}
}else if(flag.equals("0")){
Session s = map.get(Integer.valueOf(zhuid));
if(s!=null){
Friend f = new Friend();User user = userService.getUserById(Integer.valueOf(urluserid));
f.setReciver(user.getUsername()+"拒绝添加你为好友");f.setKey(false);
f.setMyid(Integer.valueOf(zhuid));f.setFriendid(Integer.valueOf(urluserid));
try {
s.getBasicRemote().sendText(Friend.toJson(f));
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
@OnClose
public void close(Session session){
String queryString = session.getQueryString();
String urluserid = queryString.split("=")[1];
int myid = Integer.valueOf(urluserid);
map.remove(myid);
}
}