1.获取httpSession(因为项目需求,要获取ServletContext等)
解决办法:重写修改握手方法 import javax.servlet.http.HttpSession;
import javax.websocket.HandshakeResponse;
import javax.websocket.server.HandshakeRequest;
import javax.websocket.server.ServerEndpointConfig;
/**
public class GetHttpSessionConfigurator extends ServerEndpointConfig.Configurator {
}
然后修改注解为:
@ServerEndpoint(value="/websocket", configurator=GetHttpSessionConfigurator.class)
获取:private static HttpSession httpSession;
httpSession = (HttpSession) config.getUserProperties().get(HttpSession.class.getName());
问题2:
服务死掉之后,(前台使用心跳,心跳抓不到HttpSession),或者未登录用户连接WebSocket,一直close状态的情况:
解决办法:建立RequestListener监听. import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpServletRequest;
/**
@WebListener
public class RequestListener implements ServletRequestListener {
}
ok!!