我在專案中使用springmvc+mybatis開發一個實時重繪的專案,在本地測驗前端和后端都可以正常使用,在公司linux服務器上面發布測驗也能正常訪問。但在客戶服務器上部署運行訪問就報錯,由于是客戶的服務器,只能通過外網訪問。
前端報錯:
Firefox 無法建立到 ws://外網地址/專案名/websocket 服務器的連接。
Close mySocket finish ...
后臺日志,錯誤如下:
2016-05-23 18:22:14 [ http-nio-10030-exec-23:63930 ] - [ DEBUG ] DispatcherServlet with name 'spring' processing GET request for [/專案名/websocket]
2016-05-23 18:22:14 [ http-nio-10030-exec-23:63930 ] - [ DEBUG ] Looking up handler method for path /websocket
2016-05-23 18:22:14 [ http-nio-10030-exec-23:63945 ] - [ DEBUG ] Did not find handler method for [/websocket]
2016-05-23 18:22:14 [ http-nio-10030-exec-23:63945 ] - [ DEBUG ] Mapping [/websocket] to HandlerExecutionChain with handler [org.springframework.web.socket.server.support.WebSocketHttpRequestHandler@69dc323b] and 1 interceptor
2016-05-23 18:22:14 [ http-nio-10030-exec-23:63946 ] - [ DEBUG ] Last-Modified value for [/HGS-DTUTest/websocket] is: -1
2016-05-23 18:22:14 [ http-nio-10030-exec-23:63947 ] - [ DEBUG ] Skip CORS processing, request is a same-origin one
2016-05-23 18:22:14 [ http-nio-10030-exec-23:63947 ] - [ DEBUG ] GET /專案名/websocket
2016-05-23 18:22:14 [ http-nio-10030-exec-23:63950 ] - [ DEBUG ] Resolving exception from handler [org.springframework.web.socket.server.support.WebSocketHttpRequestHandler@69dc323b]: org.springframework.web.socket.server.HandshakeFailureException: Uncaught failure for request http://外網地址/專案名/websocket; nested exception is java.lang.NoSuchMethodError: org.apache.tomcat.websocket.server.WsServerContainer.doUpgrade(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Ljavax/websocket/server/ServerEndpointConfig;Ljava/util/Map;)V
2016-05-23 18:22:14 [ http-nio-10030-exec-23:63950 ] - [ DEBUG ] Resolving exception from handler [org.springframework.web.socket.server.support.WebSocketHttpRequestHandler@69dc323b]: org.springframework.web.socket.server.HandshakeFailureException: Uncaught failure for request http://外網地址/專案名/websocket; nested exception is java.lang.NoSuchMethodError: org.apache.tomcat.websocket.server.WsServerContainer.doUpgrade(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Ljavax/websocket/server/ServerEndpointConfig;Ljava/util/Map;)V
2016-05-23 18:22:14 [ http-nio-10030-exec-23:63950 ] - [ DEBUG ] Could not complete request
org.springframework.web.socket.server.HandshakeFailureException: Uncaught failure for request http://外網地址/專案名/websocket; nested exception is java.lang.NoSuchMethodError: org.apache.tomcat.websocket.server.WsServerContainer.doUpgrade(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Ljavax/websocket/server/ServerEndpointConfig;Ljava/util/Map;)V
at org.springframework.web.socket.server.support.WebSocketHttpRequestHandler.handleRequest(WebSocketHttpRequestHandler.java:174)
at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:51)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:85)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:522)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:1096)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:760)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1480)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NoSuchMethodError: org.apache.tomcat.websocket.server.WsServerContainer.doUpgrade(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Ljavax/websocket/server/ServerEndpointConfig;Ljava/util/Map;)V
at org.springframework.web.socket.server.standard.TomcatRequestUpgradeStrategy.upgradeInternal(TomcatRequestUpgradeStrategy.java:70)
at org.springframework.web.socket.server.standard.AbstractStandardUpgradeStrategy.upgrade(AbstractStandardUpgradeStrategy.java:119)
at org.springframework.web.socket.server.support.AbstractHandshakeHandler.doHandshake(AbstractHandshakeHandler.java:264)
at org.springframework.web.socket.server.support.WebSocketHttpRequestHandler.handleRequest(WebSocketHttpRequestHandler.java:166)
... 33 more
java中的代碼:
@RequestMapping("/websocket")
public class RTWebsocketController extends TextWebSocketHandler{
private ExecutorService executor = Executors.newCachedThreadPool();
@Autowired
private RTInfoService rtInfoService;
public String deviceCode = "";
@Autowired
private DeviceInfoService deviceInfoService;
private static final Logger logger = LoggerFactory.getLogger(RTWebsocketController.class);
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {}
}
HandshakeInterceptor(握手類)
public class RTHandshakeInterceptor extends HttpSessionHandshakeInterceptor{
@Override
public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler,
Exception ex) {
super.afterHandshake(request, response, wsHandler, ex);
}
@Override
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler arg 2,Map<String, Object> attributes) throws Exception {
if(request instanceof ServletServerHttpRequest){
ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) request;
HttpSession session = servletRequest.getServletRequest().getSession(false);
if(session != null){
SystemUserInfo user = (SystemUserInfo) session.getAttribute("user");
attributes.put("user", user);
}
}
return true;
}
}
springmvc.xml
<bean id="websocket" class="包名+RTWebsocketController" />
<websocket:handlers>
<websocket:mapping path="/websocket" handler="websocket" />
<websocket:handshake-interceptors>
<bean class="包名+RTHandshakeInterceptor"/>
</websocket:handshake-interceptors>
</websocket:handlers>
java的代碼沒有寫全,就貼了大概實作,具體的業務邏輯沒有貼出來。是在是不知道為什么原因,會的大神麻煩解答下,還有一個問題就是問什么tomcat9在本地部署也不能訪問。注:訪問地址有埠號,只是沒有貼上。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/132576.html
標籤:網絡通信
上一篇:nagle與滑動視窗的問題
下一篇:通信加密代碼求助啊~!!~
