異常可能性:
- 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
@WebListener
public class RequestListener implements ServletRequestListener {@Overridepublic void requestDestroyed(ServletRequestEvent servletRequestEvent) {}@Overridepublic void requestInitialized(ServletRequestEvent servletRequestEvent) {((HttpServletRequest)servletRequestEvent.getServletRequest()).getSession();}
}
雖然有Session了,還是連接不上!
方法三 :成功解決
靈感 : 方法2通過監聽創建Session。監聽最牛逼的不應該是攔截器或者過濾器。
可以從攔截器中獲取到我需要的數據,在request里面配置,應該更好。從request中getSession,存點東西進去試試。
@WebFilter(urlPatterns = "/*")
public class ArticleFilter implements Filter {@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException{long start = System.currentTimeMillis();// 存入sessionSystem.out.println("存入session");((HttpServletRequest) request).getSession().setAttribute("name", 123);// 封裝請求信息存儲到請求上下文chain.doFilter(request, response);long end = System.currentTimeMillis();System.out.println("請求耗時:" + (end - start) + "ms");}
}