2015-01-17 26 views
5

Tôi đang cố gắng tạo một điểm cuối websocket với mùa xuân. Nhưng Bất cứ khi nào tôi cố gắng kết nối từ phía khách hàng, tôi nhận được 404. Tôi cũng có triển khai Java vớiSpring websocket getting 404 không tìm thấy

@ServerEndpoint(value = "/websocket") 

hoạt động tốt. Dưới đây là mã thực hiện mùa xuân của tôi mà không hoạt động. Tôi làm gì sai ở đây?

package com.tlab.endpoint; 

import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.web.socket.WebSocketHandler; 
import org.springframework.web.socket.config.annotation.EnableWebSocket; 
import org.springframework.web.socket.config.annotation.WebSocketConfigurer; 
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; 

@Configuration 
@EnableWebSocket 
public class WebSocketConfig implements WebSocketConfigurer { 

    @Override 
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { 
     registry.addHandler(socketHandler(),"/socket");; 
    } 

    @Bean 
    public WebSocketHandler socketHandler() { 
     return new SocketHandler(); 
    } 

} 

dưới đây là Handler

package com.tlab.endpoint; 

import org.springframework.web.socket.TextMessage; 
import org.springframework.web.socket.WebSocketSession; 
import org.springframework.web.socket.handler.TextWebSocketHandler; 


public class SocketHandler extends TextWebSocketHandler { 

    @Override 
    public void handleTextMessage(WebSocketSession session, TextMessage message) { 

    } 

} 

Trong đoạn code phía khách hàng tôi đã thử tất cả diff có thể kết hợp

với/ổ cắm trong handler

var websocket = new WebSocket("ws://localhost:8080/tsim/socket"); 
var websocket = new WebSocket("ws://localhost:8080/tsim/socket"); 
var websocket = new WebSocket("ws://localhost:8080/tsim/rest/socket"); 

với/nghỉ ngơi/ổ cắm trong handler

var websocket = new WebSocket("ws://localhost:8080/tsim/rest/socket"); 

nơi tsim là ngữ cảnh của tôi. Mọi thứ đều ném lỗi bên dưới

WebSocket connection to 'ws://localhost:8080/tsim/socket' failed: Error during WebSocket handshake: Unexpected response code: 404. 

Tôi không nhận được bất kỳ lỗi biên dịch và triển khai nào. Tôi đã sử dụng tomcat 8.0 và dưới đây là cấu hình servatcher dispatcher.

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:int="http://www.springframework.org/schema/integration" 
     xmlns:int-ftp="http://www.springframework.org/schema/integration/ftp" 
     xmlns:batch="http://www.springframework.org/schema/batch" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:aop="http://www.springframework.org/schema/aop" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:mvc="http://www.springframework.org/schema/mvc" 
     xmlns:websocket="http://www.springframework.org/schema/websocket" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
      http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd 
      http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd 
      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
      http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch-2.2.xsd 
      http://www.springframework.org/schema/integration/ftp http://www.springframework.org/schema/integration/ftp/spring-integration-ftp.xsd 
      http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd 
      http://www.springframework.org/schema/websocket 
     http://www.springframework.org/schema/websocket/spring-websocket.xsd" 
     > 

    <import resource="classpath*:web-db-spring.xml"/> 

    <context:component-scan base-package="com.traderslab.nseb,com.tlab.endpoint"/> 

    <aop:aspectj-autoproxy/> 

    <mvc:annotation-driven> 
     <mvc:message-converters> 
      <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> 
       <property name="prefixJson" value="false"/> 
       <property name="supportedMediaTypes" value="application/json"/> 
       <property name="objectMapper"> 
        <bean class="com.fasterxml.jackson.databind.ObjectMapper"> 
         <property name="serializationInclusion" value="NON_NULL"/> 
        </bean> 
       </property> 
      </bean> 
      <bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"/> 
     </mvc:message-converters> 
    </mvc:annotation-driven> 

    <mvc:default-servlet-handler/> 

</beans> 

dưới đây là web.xml của tôi

<servlet> 
    <servlet-name>dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>/WEB-INF/classes/dispatcher-servlet.xml</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>dispatcher</servlet-name> 
    <url-pattern>/rest/</url-pattern> 
</servlet-mapping> 
+0

Bạn hiển thị 'ws: // localhost: 8080/tsim/socket' trong ví dụ của mình nhưng thông báo lỗi hiển thị 'ws: // localhost: 8080/TradeSim/socket'. Đó là 'tsim' hay' TradeSim'? – Bogdan

+0

Tôi đã thử một cách khác .. phần mà tôi đề cập lấy nó như là tsim hoặc TradeSim là bối cảnh của nó .. Để tránh nhầm lẫn, tôi sẽ chỉnh sửa nó – anandaravindan

Trả lời

2

cuối cùng tôi đã tìm thấy câu trả lời bản thân mình. Vì điều này được xử lý bởi servatcher điều phối như là yêu cầu http bình thường. Tôi cần phải thêm chú thích @Controller vào lớp WebSocketConfig

@Configuration 
@EnableWebSocket 
@Controller 
public class WebSocketConfig implements WebSocketConfigurer 
+0

Tôi đang sử dụng khởi động mùa xuân và có cùng sự cố, tuy nhiên thêm @Controller vào WebSocketConfig doesn ' t giúp đỡ. Tôi nhận được một 403 đáng ngạc nhiên. Bạn có thể giúp? – Greyshack

+0

Tìm thấy bản sửa lỗi. Nếu bạn muốn kiểm tra websocket bằng trình duyệt của mình, bạn cần thêm registry.addHandler (socketHandler(), "/ socket"). SetAllowedOrigins ("*"); – Greyshack

0

Tôi là trường hợp của tôi, vấn đề nằm trong ánh xạ servlet của bộ điều phối. Tôi chỉ có bản đồ * .mvc và websocket không có nó, vì vậy tôi phải thay đổi thành:

<servlet-mapping> 
    <servlet-name>dispatcherServlet</servlet-name> 
    <url-pattern>*.mvc</url-pattern> 
    <url-pattern>/</url-pattern> 
    </servlet-mapping> 
Các vấn đề liên quan