异常可能性:
- 404 : 请检查拦截器是否将请求拦截
- WebSocket握手期间HttpSession为空
HttpSession为空
方法一 :
网上参考大量的文档,有说跟前端请求域名有关系的。 反正对我来说,没啥用无法连接。
需使用 localhost,不能使用127.0.01
var host = window.location.host;
var url = "ws://"+host+"/chatRoom/null";
方法二 :可以解决
添加监听配置 ,采用spring boot自动装配的方式,创建一个Session。
因为我需要存入数据,所以对我而言,不太ok。
其他原因看:WebSocket获取httpSession空指针异常的解决办法https://blog.csdn.net/csu_passer/article/details/78536060
java
@WebListener
public class RequestListener implements ServletRequestListener {
@Override
public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
}
@Override
public void requestInitialized(ServletRequestEvent servletRequestEvent) {
((HttpServletRequest)servletRequestEvent.getServletRequest()).getSession();
}
}
虽然有Session了,还是连接不上!
方法三 :成功解决
灵感 : 方法2通过监听创建Session。监听最牛逼的不应该是拦截器或者过滤器。
可以从拦截器中获取到我需要的数据,在request里面配置,应该更好。从request中getSession,存点东西进去试试。
java
@WebFilter(urlPatterns = "/*")
public class ArticleFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException{
long start = System.currentTimeMillis();
// 存入session
System.out.println("存入session");
((HttpServletRequest) request).getSession().setAttribute("name", 123);
// 封装请求信息存储到请求上下文
chain.doFilter(request, response);
long end = System.currentTimeMillis();
System.out.println("请求耗时:" + (end - start) + "ms");
}
}