JFinal兼容websocket的问题。·

我是在网上搜到一个帖子,跟着搞得,结果依旧有问题。帖子如下:

http://blog.csdn.net/woainimax/article/details/53185857

今天正式兼容JFinal和websocket,结果搞了几个小时依旧报错。

前端socket的url路径怎么写都报错。chorme F12总是报错!404估计路径不对。

index:155 WebSocket connection to 'ws://localhost/tmgh/websocket' failed: Error during WebSocket handshake: Unexpected response code: 404

现在依旧不对,现在让我怀疑其是否后台Jfinal对websocket的支持是否配置正确。

先将代码展示出来,往波神予以帮助,谢谢!

这是handler的配置:

WebSocketHandler Handler {
        Pattern (String filterUrlRegx) {
            (StrKit.(filterUrlRegx))
                IllegalArgumentException()= Pattern.(filterUrlRegx)}
        (String targetHttpServletRequest requestHttpServletResponse response[] isHandled) {
            (.matcher(target).find())
                .handle(targetrequestresponseisHandled)}
}

这是controller的代码:

()
WSController Controller {
   (Session session) {
      System..println()}

   (Session session) {
      System..println()}

   (String requestJsonSession session) {
      {
         session.getBasicRemote().sendText(requestJson)} (IOException e) {
         e.printStackTrace()}
   }

}

这是config中增加的handler:

(Handlers me) {
   me.add(WebSocketHandler())}

这是maven的pom.xml,早上已经在波神的指导下去掉了scope : provide

javax.websocketjavax.websocket-api1.1javaxjavaee-api7.0

前台的页面:

var socket = new WebSocket("ws://localhost/tmgh/websocket");
//socket的消息发送
// 连接发生错误的回调方法
socket.onerror = function() {
    console.log("连接失败!");
};
// 连接成功建立的回调方法
socket.onopen = function(event) {
    console.log("链接成功!");
}

// 接收到消息的回调方法
socket.onmessage = function(event) {
    console.log("收到消息啦:" +event.data);
    var obj=eval("("+event.data+")");
    layim.getMessage(obj);
}

// 连接关闭的回调方法
socket.onclose = function() {
    console.log("关闭连接!!");
}
// 监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。
window.onbeforeunload = function() {
    socket.close();
}


请问波神,不知后台的配置有无错误。web.xml文件需增加支持吗?

评论区

JFinal

2017-04-27 14:26

参考这里:http://www.jfinal.com/feedback/402

Ferrari8899

2017-04-27 14:58

@JFinal 没看懂,该如何用哪种方法。

Ferrari8899

2017-04-27 15:17

@JFinal 用的是handler拦截websocket
浏览器总是报错:
WebSocket connection to 'ws://ws/' failed: Error in connection establishment: net::ERR_NAME_NOT_RESOLVED

JFinal

2017-04-27 15:32

@Ferrari8899 jfinal 官方并未提供 websocket 扩展,抱歉无法帮助到你

bxh7425014

2017-09-10 13:57

我也遇到这个问题了。写了一个@ServerEndpoint("/websocket")
public class WebSocketController {...},没有走到。
public class ZhiWebSocketHandler extends Handler {
...@Override
public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) {
// TODO Auto-generated method stub
if (filterUrlRegxPattern.matcher(target).find())
return ;
else {
next.handle(target, request, response, isHandled);
}
}
此处的else走到了。
@JFinal

bxh7425014

2017-09-10 13:57

@Ferrari8899 您后来解决了吗?谢谢。

陌上花开_xx

2018-05-04 10:55

我也遇到了这个问题,各种配置都没问题就是报404.原因是我用jetty启动的web项目,jetty本身是不支持websocket的,得自己修改启动代码。
ServerContainer wscontainer = WebSocketServerContainerInitializer.configureContext(webApp);
// Add WebSocket endpoint to javax.websocket layer
wscontainer.addEndpoint(WebSocketController.class); //如果需要使用websocket就加上,不需要就注释掉这行,WebSocketController是自己写的WebSocketController服务类
不知道你是不是这个原因造成的,希望能帮到你

热门反馈

扫码入社