开发者社区> 问答> 正文

WebSocket连接失败(Java) Error during WebSock?400报错

项目名 chat  端口号8080 访问路径:"ws://localhost:8080/websocket"  jdk :1.8, Maven配置的tomcat是tomcat8, POM.xml添加了javax.websocket-api,spring-websocket和javax.servlet-api(provided)依赖。web.xml里的<url-pattern/>为"/", 访问Controller路径正常。访问websocket路径报错:Error during WebSocket handshake: Unexpected response code: 400 . 
不知道 websocket路径 是不是被 DispatcherServlet被拦截了?还是url有问题。 请坛友帮忙解答,谢谢。

 <build>
        <finalName>chat</finalName>
        <!-- 配置插件 -->
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId> 
                <artifactId>tomcat-maven-plugin</artifactId>
                <configuration>
                    <port>8080</port>
                    <path>/</path>
                    <uriEncoding>UTF-8</uriEncoding>
                </configuration>
            </plugin>
        </plugins>
</build>


后端代码:

@ServerEndpoint(value = "/websocket", configurator = SocketConfigurator.class)
public class WebServer {
    
    @OnOpen
    public void open(Session session){
        System.out.println("OPEN is running");
    }
    
    @OnMessage
    public void receiveMessage(String message, Session session){
        System.out.println(" send Message .. " +message);
        session.getAsyncRemote().sendText(message);
    }
    
    @OnClose
    public void close(){
        System.out.println("Close is running ...");
    }
}
public class SocketConfigurator extends Configurator {
    @Override
    public void modifyHandshake(ServerEndpointConfig config, HandshakeRequest request, HandshakeResponse response) {
        HttpSession httpSession = (HttpSession) request.getHttpSession();
        config.getUserProperties().put("ClientIP", httpSession.getAttribute("ClientIPadd"));
    }
}

前端代码:

<!DOCTYPE html>
<html>

    <head>
        <meta name="viewport" content="width=device-width" />
        <title>WebSocket 客户端</title>
    </head>

    <body>
        <div>
            <input type="button" id="btnConnection" value="连接" />
            <input type="button" id="btnClose" value="关闭" />
            <input type="button" id="btnSend" value="发送" />
        </div>
        <script src="http://code.jquery.com/jquery-3.2.1.js"integrity="sha256-DZAnKJ/6XZ9si04Hgrsxu/8s717jcIzLy3oi35EouyE="
  crossorigin="anonymous"></script>
        <script type="text/javascript">
            var socket;
            if(typeof(WebSocket) == "undefined") {
                alert("您的浏览器不支持WebSocket");
                
            }

            $("#btnConnection").click(function() {
                //实现化WebSocket对象,指定要连接的服务器地址与端口
				socket = new WebSocket("ws://localhost:8080/websocket");
				
                //打开事件
                socket.onopen = function() {
                    alert("Socket 已打开");
                    //socket.send("这是来自客户端的消息" + location.href + new Date());
                };
                //获得消息事件
                socket.onmessage = function(msg) {
                    alert(msg.data);
                };
                //关闭事件
                socket.onclose = function() {
                    alert("Socket已关闭");
                };
                //发生了错误事件
                socket.onerror = function() {
                    alert("发生了错误");
                }
            });
            
            //发送消息
            $("#btnSend").click(function() {
                socket.send("这是来自客户端的消息" + location.href + new Date());
            });
            
            //关闭
            $("#btnClose").click(function() {
                socket.close();
            });
        </script>
    </body>

</html>

 

展开
收起
爱吃鱼的程序员 2020-06-07 18:39:31 1026 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB
                        <p>有么有大神给点指导意见呀</p>
    

    不用实现有思路也好

                        <p>既然有外键,就应该关联删除</p>
    
                    
    
                                回复 <a class="referer" target="_blank">@jfinal_lag</a>  : 那如果是像库存这样的对象您觉得该怎么处理呢?我现在这边商品的库存存在多个地方,互相还会调拨,也就是说存在库存记录和调拨单记录,删除商品的话不知道如何处理这些记录 谢谢!
                        
    
                                回复 <a class="referer" target="_blank">@TommyJ</a>  : 做一个订单和商品的关联表,里面冗余一些商品的需要显示的信息
                        
    
                            理论上来说确实是应该关联的都删除,但是有些表不大适合删,比如订单关联着商品,商品被删除之后用户如果看到订单不见了估计也会捉急。。。之前用mybatis写软删除加载不会报错 但是hibernate的懒加载会报错。。。
                        
    
                        <p>有没有好的思路呀。。。大家都给点建议嘛 谢谢啦</p>
    
    2020-06-07 21:44:44
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载