jfinal+websocket报错404

前端代码:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.     <title>测试</title>
  5. </head>
  6. <body>
  7.     Welcome<br/><input id="text" type="text"/>
  8.     <button onclick="send()">发送消息</button>
  9.     <hr/>
  10.     <button onclick="closeWebSocket()">关闭WebSocket连接</button>
  11.     <hr/>
  12.     <div id="message"></div>
  13. </body>
  14.  
  15. <script type="text/javascript">
  16.     var websocket = null;
  17.     //判断当前浏览器是否支持WebSocket
  18.     if ('WebSocket' in window) {
  19.         websocket = new WebSocket("ws://localhost:82/websocket/t.ws");
  20.     }
  21.     else {
  22.         alert('当前浏览器 Not support websocket')
  23.     }
  24.  
  25.     //连接发生错误的回调方法
  26.     websocket.onerror = function () {
  27.         setMessageInnerHTML("WebSocket连接发生错误");
  28.     };
  29.  
  30.     //连接成功建立的回调方法
  31.     websocket.onopen = function () {
  32.         setMessageInnerHTML("WebSocket连接成功");
  33.     }
  34.  
  35.     //接收到消息的回调方法
  36.     websocket.onmessage = function (event) {
  37.         setMessageInnerHTML(event.data);
  38.     }
  39.  
  40.     //连接关闭的回调方法
  41.     websocket.onclose = function () {
  42.         setMessageInnerHTML("WebSocket连接关闭");
  43.     }
  44.  
  45.     //监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。
  46.     window.onbeforeunload = function () {
  47.         closeWebSocket();
  48.     }
  49.  
  50.     //将消息显示在网页上
  51.     function setMessageInnerHTML(innerHTML) {
  52.         document.getElementById('message').innerHTML += innerHTML + '<br/>';
  53.     }
  54.  
  55.     //关闭WebSocket连接
  56.     function closeWebSocket() {
  57.         websocket.close();
  58.     }
  59.  
  60.     //发送消息
  61.     function send() {
  62.         var message = document.getElementById('text').value;
  63.         websocket.send(message);
  64.     }
  65. </script>
  66. </html>

后端配置:

  1. package com.common.config;
  2. import java.util.regex.Pattern;
  3.  
  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpServletResponse;
  6.  
  7.  
  8. import com.jfinal.handler.Handler;
  9. import com.jfinal.kit.StrKit;
  10.  
  11. public class WebSocketHandler extends Handler {
  12.  
  13.     private Pattern filterUrlRegxPattern;
  14.  
  15.     public WebSocketHandler(String filterUrlRegx) {
  16.         if (StrKit.isBlank(filterUrlRegx))
  17.             throw new IllegalArgumentException("The para filterUrlRegx can not be blank.");
  18.         filterUrlRegxPattern = Pattern.compile(filterUrlRegx);
  19.     }
  20.  
  21.     @Override
  22.     public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) {
  23.         if (filterUrlRegxPattern.matcher(target).find())
  24.             return ;
  25.         else
  26.             next.handle(target, request, response, isHandled);
  27.  
  28.     }
  29. }
  1. main-configHandler配置:
  2. public void configHandler(Handlers me) {
  3.   
  4.    me.add(new WebSocketHandler("^/websocket"));
  5. }

主要的接口:

  1. @ServerEndpoint("/websocket/t.ws")
  2. public class WebsocketTest {
  3.  
  4. }

刷新页面控制台的debug日志:

  1. 2019-07-18 11:42:28
  2. [DEBUG]-[Thread: qtp1526298704-41 Selector0]-[org.eclipse.jetty.io.nio.SelectorManager$SelectSet.createEndPoint()]: created SCEP@ade7c1f{l(/192.168.1.120:56220)<->r(/192.168.1.120:82),d=false,open=true,ishut=false,oshut=false,rb=false,wb=false,w=true,i=0}-{AsyncHttpConnection@5652178b,g=HttpGenerator{s=0,h=-1,b=-1,c=-1},p=HttpParser{s=-14,l=0,c=0},r=0}
  3.  
  4. 2019-07-18 11:42:28
  5. [DEBUG]-[Thread: qtp1526298704-43]-[org.eclipse.jetty.http.HttpParser.parseNext()]: filled 500/500
  6.  
  7. 2019-07-18 11:42:28
  8. [DEBUG]-[Thread: qtp1526298704-43 - /websocket/t.ws]-[org.eclipse.jetty.server.Server.handle()]: REQUEST /websocket/t.ws on AsyncHttpConnection@5652178b,g=HttpGenerator{s=0,h=-1,b=-1,c=-1},p=HttpParser{s=-5,l=42,c=0},r=1
  9.  
  10. 2019-07-18 11:42:28
  11. [DEBUG]-[Thread: qtp1526298704-43 - /websocket/t.ws]-[org.eclipse.jetty.server.handler.ContextHandler.doScope()]: scope null||/websocket/t.ws @ o.e.j.w.WebAppContext{/,file:/E:/dyry/medicaltriagesystem_olddy/src/main/webapp/}
  12.  
  13. 2019-07-18 11:42:28
  14. [DEBUG]-[Thread: qtp1526298704-43 - /websocket/t.ws]-[org.eclipse.jetty.server.handler.ContextHandler.doScope()]: context=||/websocket/t.ws @ o.e.j.w.WebAppContext{/,file:/E:/dyry/medicaltriagesystem_olddy/src/main/webapp/}
  15.  
  16. 2019-07-18 11:42:28
  17. [DEBUG]-[Thread: qtp1526298704-43 - /websocket/t.ws]-[org.eclipse.jetty.server.session.SessionHandler.doScope()]: sessionManager=org.eclipse.jetty.server.session.HashSessionManager@27f981c6
  18.  
  19. 2019-07-18 11:42:28
  20. [DEBUG]-[Thread: qtp1526298704-43 - /websocket/t.ws]-[org.eclipse.jetty.server.session.SessionHandler.doScope()]: session=null
  21.  
  22. 2019-07-18 11:42:28
  23. [DEBUG]-[Thread: qtp1526298704-43 - /websocket/t.ws]-[org.eclipse.jetty.servlet.ServletHandler.doScope()]: servlet |/websocket/t.ws|null -> default
  24.  
  25. 2019-07-18 11:42:28
  26. [DEBUG]-[Thread: qtp1526298704-43 - /websocket/t.ws]-[org.eclipse.jetty.servlet.ServletHandler.doHandle()]: chain=shiro->jfinal->default
  27.  
  28. 2019-07-18 11:42:28
  29. [DEBUG]-[Thread: qtp1526298704-43 - /websocket/t.ws]-[org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter()]: call filter shiro
  30.  
  31. 2019-07-18 11:42:28
  32. [DEBUG]-[Thread: qtp1526298704-43 - /websocket/t.ws]-[org.apache.shiro.session.mgt.DefaultSessionManager.retrieveSession()]: Unable to resolve session ID from SessionKey [org.apache.shiro.web.session.mgt.WebSessionKey@366bc7c0].  Returning null to indicate a session could not be found.
  33.  
  34. 2019-07-18 11:42:28
  35. [DEBUG]-[Thread: qtp1526298704-43 - /websocket/t.ws]-[org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter()]: call filter jfinal
  36.  
  37. 2019-07-18 11:42:30
  38. [DEBUG]-[Thread: qtp1526298704-43 - /websocket/t.ws]-[org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter()]: call servlet default
  39.  
  40. 2019-07-18 11:42:30
  41. [DEBUG]-[Thread: qtp1526298704-43 - /websocket/t.ws]-[org.eclipse.jetty.servlet.DefaultServlet.getResource()]: Resource /websocket/t.ws.gz=null
  42.  
  43. 2019-07-18 11:42:30
  44. [DEBUG]-[Thread: qtp1526298704-43 - /websocket/t.ws]-[org.eclipse.jetty.servlet.DefaultServlet.getResource()]: Resource /websocket/t.ws=null
  45.  
  46. 2019-07-18 11:42:30
  47. [DEBUG]-[Thread: qtp1526298704-43 - /websocket/t.ws]-[org.eclipse.jetty.servlet.DefaultServlet.doGet()]: uri=/websocket/t.ws resource=null
  48.  
  49. 2019-07-18 11:42:30
  50. [DEBUG]-[Thread: qtp1526298704-43 - /websocket/t.ws]-[org.eclipse.jetty.server.Server.handle()]: RESPONSE /websocket/t.ws  404 handled=true


请问到底是哪里问题呢?困扰了两天了,jetty升到2019.3启动报错:

  1. Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/jetty/server/SessionManager
  2. at com.jfinal.core.JFinal.start(JFinal.java:170)
  3. at com.common.config.MainConfig.main(MainConfig.java:152)
  4. 引入的maven包:

image.png

求大佬帮忙看看呢

评论区

JFinal

2019-07-18 13:02

websocket 开发一定要参考文档:
https://www.jfinal.com/doc/1-4

热门反馈

扫码入社