jfinal+websocket报错404

前端代码:

<!DOCTYPE html>
<html>
<head>
    <title>测试</title>
</head>
<body>
    Welcome<br/><input id="text" type="text"/>
    <button onclick="send()">发送消息</button>
    <hr/>
    <button onclick="closeWebSocket()">关闭WebSocket连接</button>
    <hr/>
    <div id="message"></div>
</body>

<script type="text/javascript">
    var websocket = null;
    //判断当前浏览器是否支持WebSocket
    if ('WebSocket' in window) {
        websocket = new WebSocket("ws://localhost:82/websocket/t.ws");
    }
    else {
        alert('当前浏览器 Not support websocket')
    }

    //连接发生错误的回调方法
    websocket.onerror = function () {
        setMessageInnerHTML("WebSocket连接发生错误");
    };

    //连接成功建立的回调方法
    websocket.onopen = function () {
        setMessageInnerHTML("WebSocket连接成功");
    }

    //接收到消息的回调方法
    websocket.onmessage = function (event) {
        setMessageInnerHTML(event.data);
    }

    //连接关闭的回调方法
    websocket.onclose = function () {
        setMessageInnerHTML("WebSocket连接关闭");
    }

    //监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。
    window.onbeforeunload = function () {
        closeWebSocket();
    }

    //将消息显示在网页上
    function setMessageInnerHTML(innerHTML) {
        document.getElementById('message').innerHTML += innerHTML + '<br/>';
    }

    //关闭WebSocket连接
    function closeWebSocket() {
        websocket.close();
    }

    //发送消息
    function send() {
        var message = document.getElementById('text').value;
        websocket.send(message);
    }
</script>
</html>

后端配置:

package com.common.config;
import java.util.regex.Pattern;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import com.jfinal.handler.Handler;
import com.jfinal.kit.StrKit;

public class WebSocketHandler extends Handler {

    private Pattern filterUrlRegxPattern;

    public WebSocketHandler(String filterUrlRegx) {
        if (StrKit.isBlank(filterUrlRegx))
            throw new IllegalArgumentException("The para filterUrlRegx can not be blank.");
        filterUrlRegxPattern = Pattern.compile(filterUrlRegx);
    }

    @Override
    public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) {
        if (filterUrlRegxPattern.matcher(target).find())
            return ;
        else
            next.handle(target, request, response, isHandled);

    }
}
main-configHandler配置:
public void configHandler(Handlers me) {
  
   me.add(new WebSocketHandler("^/websocket"));
}

主要的接口:

@ServerEndpoint("/websocket/t.ws")
public class WebsocketTest {

}

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

2019-07-18 11:42:28
[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}

2019-07-18 11:42:28
[DEBUG]-[Thread: qtp1526298704-43]-[org.eclipse.jetty.http.HttpParser.parseNext()]: filled 500/500

2019-07-18 11:42:28
[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

2019-07-18 11:42:28
[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/}

2019-07-18 11:42:28
[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/}

2019-07-18 11:42:28
[DEBUG]-[Thread: qtp1526298704-43 - /websocket/t.ws]-[org.eclipse.jetty.server.session.SessionHandler.doScope()]: sessionManager=org.eclipse.jetty.server.session.HashSessionManager@27f981c6

2019-07-18 11:42:28
[DEBUG]-[Thread: qtp1526298704-43 - /websocket/t.ws]-[org.eclipse.jetty.server.session.SessionHandler.doScope()]: session=null

2019-07-18 11:42:28
[DEBUG]-[Thread: qtp1526298704-43 - /websocket/t.ws]-[org.eclipse.jetty.servlet.ServletHandler.doScope()]: servlet |/websocket/t.ws|null -> default

2019-07-18 11:42:28
[DEBUG]-[Thread: qtp1526298704-43 - /websocket/t.ws]-[org.eclipse.jetty.servlet.ServletHandler.doHandle()]: chain=shiro->jfinal->default

2019-07-18 11:42:28
[DEBUG]-[Thread: qtp1526298704-43 - /websocket/t.ws]-[org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter()]: call filter shiro

2019-07-18 11:42:28
[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.

2019-07-18 11:42:28
[DEBUG]-[Thread: qtp1526298704-43 - /websocket/t.ws]-[org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter()]: call filter jfinal

2019-07-18 11:42:30
[DEBUG]-[Thread: qtp1526298704-43 - /websocket/t.ws]-[org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter()]: call servlet default

2019-07-18 11:42:30
[DEBUG]-[Thread: qtp1526298704-43 - /websocket/t.ws]-[org.eclipse.jetty.servlet.DefaultServlet.getResource()]: Resource /websocket/t.ws.gz=null

2019-07-18 11:42:30
[DEBUG]-[Thread: qtp1526298704-43 - /websocket/t.ws]-[org.eclipse.jetty.servlet.DefaultServlet.getResource()]: Resource /websocket/t.ws=null

2019-07-18 11:42:30
[DEBUG]-[Thread: qtp1526298704-43 - /websocket/t.ws]-[org.eclipse.jetty.servlet.DefaultServlet.doGet()]: uri=/websocket/t.ws resource=null

2019-07-18 11:42:30
[DEBUG]-[Thread: qtp1526298704-43 - /websocket/t.ws]-[org.eclipse.jetty.server.Server.handle()]: RESPONSE /websocket/t.ws  404 handled=true


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

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

image.png

求大佬帮忙看看呢

评论区

JFinal

2019-07-18 13:02

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