Java 无法运行SpringWebSocket演示

Java 无法运行SpringWebSocket演示,java,spring,websocket,Java,Spring,Websocket,我正在尝试运行SpringWebSocket的演示,但无法完全测试它。我正在使用Java7和Tomcat7.0.50。在服务器启动时,我没有收到任何错误,但是当我用js打开网页连接到它时,我发现404页没有找到。我不确定我在配置中是否缺少任何东西来运行它,以及如何从js端连接它 我有以下xml文件: <beans ....> <context:annotation-config /> <websocket:message-broker

我正在尝试运行SpringWebSocket的演示,但无法完全测试它。我正在使用Java7和Tomcat7.0.50。在服务器启动时,我没有收到任何错误,但是当我用js打开网页连接到它时,我发现404页没有找到。我不确定我在配置中是否缺少任何东西来运行它,以及如何从js端连接它

我有以下xml文件:

<beans ....>
    <context:annotation-config />

    <websocket:message-broker
        application-destination-prefix="/app">
        <websocket:stomp-endpoint path="/hello">
            <websocket:sockjs />
        </websocket:stomp-endpoint>
        <websocket:simple-broker prefix="/topic" />
    </websocket:message-broker>
</beans>
我从中调用的js是:

var sock = new SockJS("/hello");
sock.onopen = function () {
    console.log("open");
};
sock.onclose = function () {
    console.log("closed");
};
sock.onmessage = function (message) {
    console.log("msg", message);
};
运行tomcat时的控制台输出:

Feb 19, 2014 3:28:47 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jre7\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/Program Files/Java/jre6/bin/client;C:/Program Files/Java/jre6/bin;C:/Program Files/Java/jre6/lib/i386;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\OpenCL SDK\2.0\bin\x86;C:\Program Files\TortoiseGit\bin;C:\Python24;C:\Program Files\TortoiseSVN\bin;C:\Program Files\nodejs\;C:\Program Files\Git\cmd;C:\Users\harsh\AppData\Roaming\npm;E:\IDE\eclipse_indigo;;.
Feb 19, 2014 3:28:47 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:SWS' did not find a matching property.
Feb 19, 2014 3:28:48 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
Feb 19, 2014 3:28:48 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
Feb 19, 2014 3:28:48 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 1412 ms
Feb 19, 2014 3:28:48 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Feb 19, 2014 3:28:48 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.50
Feb 19, 2014 3:28:51 PM org.apache.catalina.core.ApplicationContext log
INFO: No Spring WebApplicationInitializer types detected on classpath
Feb 19, 2014 3:28:51 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring root WebApplicationContext
Feb 19, 2014 3:28:51 PM org.springframework.web.context.ContextLoader initWebApplicationContext
INFO: Root WebApplicationContext: initialization started
Feb 19, 2014 3:28:51 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing Root WebApplicationContext: startup date [Wed Feb 19 15:28:51 IST 2014]; root of context hierarchy
Feb 19, 2014 3:28:52 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from ServletContext resource [/WEB-INF/classes/conf/SwsContext.xml]
Feb 19, 2014 3:28:53 PM org.springframework.scheduling.concurrent.ExecutorConfigurationSupport initialize
INFO: Initializing ExecutorService  'clientInboundChannelExecutor'
Feb 19, 2014 3:28:53 PM org.springframework.scheduling.concurrent.ExecutorConfigurationSupport initialize
INFO: Initializing ExecutorService  'clientOutboundChannelExecutor'
Feb 19, 2014 3:28:53 PM org.springframework.scheduling.concurrent.ExecutorConfigurationSupport initialize
INFO: Initializing ExecutorService  'messageBrokerSockJsScheduler'
Feb 19, 2014 3:28:53 PM org.springframework.web.servlet.handler.AbstractUrlHandlerMapping registerHandler
INFO: Mapped URL path [/hello/**] onto handler of type [class org.springframework.web.socket.sockjs.support.SockJsHttpRequestHandler]
Feb 19, 2014 3:28:53 PM org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup start
INFO: Starting beans in phase 2147483647
Feb 19, 2014 3:28:53 PM org.springframework.web.context.ContextLoader initWebApplicationContext
INFO: Root WebApplicationContext: initialization completed in 2173 ms
Feb 19, 2014 3:28:53 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
Feb 19, 2014 3:28:53 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Feb 19, 2014 3:28:53 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 5842 ms
浏览器控制台输出:

GET http://localhost:8080/hello/info 404 (Not Found) sockjs-0.3.min.js:27
closed 
我怎样才能成功地测试它


更新

我还尝试从这里运行公文包示例:正如@jhadesdev所建议的那样

但这也无济于事。当我运行
mvn tomcat7:run
时,我看到以下输出并在浏览器404上打开url

[INFO] Scanning for projects...
[INFO]
[INFO] Using the builder org.apache.maven.lifecycle.internal.builder.singlethrea
ded.SingleThreadedBuilder with a thread count of 1
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building spring-websocket-portfolio 1.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> tomcat7-maven-plugin:2.2:run (default-cli) @ spring-websocket-portfol
io >>>
[INFO]
[INFO] --- maven-resources-plugin:2.5:resources (default-resources) @ spring-web
socket-portfolio ---
[debug] execute contextualize
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory E:\libraries\spring-websocket-portfol
io\src\main\resources
[INFO]
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ spring-websoc
ket-portfolio ---
[INFO] No sources to compile
[INFO]
[INFO] <<< tomcat7-maven-plugin:2.2:run (default-cli) @ spring-websocket-portfol
io <<<
[INFO]
[INFO] --- tomcat7-maven-plugin:2.2:run (default-cli) @ spring-websocket-portfol
io ---
[INFO] Running war on http://localhost:8080/spring-websocket-portfolio
[INFO] Using existing Tomcat server configuration at E:\libraries\spring-websock
et-portfolio\target\tomcat
[INFO] create webapp with contextPath: /spring-websocket-portfolio
Feb 27, 2014 10:20:46 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
Feb 27, 2014 10:20:46 AM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Tomcat
Feb 27, 2014 10:20:46 AM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.47
Feb 27, 2014 10:20:49 AM org.apache.catalina.core.ApplicationContext log
INFO: No Spring WebApplicationInitializer types detected on classpath
Feb 27, 2014 10:20:49 AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
[INFO]正在扫描项目。。。
[信息]
[信息]使用builder org.apache.maven.lifecycle.internal.builder.singlethrea
ded.SingleThreadedBuilder,线程计数为1
[信息]
[信息]------------------------------------------------------------------------
[信息]构建spring websocket产品组合1.0.0-SNAPSHOT
[信息]------------------------------------------------------------------------
[信息]
[INFO]>>>tomcat7 maven插件:2.2:run(默认cli)@spring-websocket-portfol
io>>>
[信息]
[信息]---maven资源插件:2.5:resources(默认资源)@SpringWeb
插座组合---
[调试]执行上下文化
[信息]使用“UTF-8”编码复制筛选的资源。
[信息]跳过不存在的资源目录E:\libraries\spring websocket portfol
io\src\main\resources
[信息]
[信息]---maven编译器插件:2.3.2:compile(默认编译)@springwebsoc
基特投资组合---
[信息]没有要编译的源
[信息]
[INFO]Chrome扩展可以帮助您测试WebSocket


此外,您还可以查看我与Websockets一起使用的项目。

尝试在webapp中添加一个资产文件夹,其中提供了所有stomp和sockjs.js文件。看一看这个例子,它可以通过
mvn clean install jetty:run
运行

问题似乎是sockjs不在服务器上,或者某个路径错误。根据链接上的示例,stomp端点可以是:

然后在javascript中,端点可以这样调用:

 var socket = new SockJS('/spring-websocket-portfolio/portfolio')
 var stompClient = Stomp.over(socket);

其中
/spring-websocket-portfolio
是应用程序的根部署路径

您的应用程序看起来不错

您应该使用应用程序的根上下文作为JavaScript请求的前缀,如下所示

您的应用程序是否注册其他筛选器或自定义MessageConverter?也许其他一些配置元素在这里起干扰作用

最新的投资组合示例肯定有效,下面是一些问题:

  • 您能告诉我们有关您的客户端设置(浏览器、版本)的更多信息吗
  • 您的浏览器是否支持websocket(测试它)
  • 您是否也可以在匿名模式下尝试(可能是第三方浏览器扩展出现故障)
  • 能否检查您的浏览器是否未使用HTTP代理来处理本地主机请求
  • 您能检查一下Tomcat访问日志中是否有这个HTTP404吗?(看看你是否对这些或卡塔利纳有什么感兴趣的东西。出来吧?)

  • 我也面临同样的问题。这条线索给了我足够的线索来解决这个问题。非常感谢

    解决方案: 如果您在web.xml中配置了一个Spring MVC Dispatcher Servlet,并映射到url模式,如下所示

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/webui/*</url-pattern>
    </servlet-mapping>
    
    var socket = new SockJS('/contextPath/webui/hello');
    

    注意:用应用程序上下文路径替换上下文路径。

    DispatcherServlet是如何映射的?可能就是你要找的

    我用这种方式解决了这个问题: 创建SockJS时,添加localhost:8080/ 像这样

    new SockJS('http://localhost:8080/spring-websocket-portfolio/portfolio')
    

    对我来说,解决方案是通过
    WebSocketConfig
    类在中启用
    SockJS

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/search")
                .setAllowedOrigins("*")
                .setHandshakeHandler(new DefaultHandshakeHandler())
                .withSockJS();
    }
    

    你好,哈利。我认为问题在于,当您创建新的SockJS对象时,您错过了项目的根。您可以尝试var sock=newsockjs(“/myProject/hello”);或者用c:url。@Evgeni我也试过了,但仍然是404:(@HarryJoy-您是否也尝试过完整的url?关于公文包示例-哪些url使用404响应?app root()或sockjs info端点()?您没有运行第二个Web服务器吗?正常情况下,两个程序不能同时在同一个端口上运行,但让我们尝试查看有问题的更新。我尝试了此操作,但不起作用。:(1.Google Chrome 33 2.是的3.尝试了,但结果相同4.不是。是的,我尝试在url中添加根上下文前缀,但也没有帮助。::(帮助。谢谢。我注意到,当这个示例从Spring引导jar文件运行时,它工作正常,但当转换为war时,它确实需要上下文路径。
    new SockJS('http://localhost:8080/spring-websocket-portfolio/portfolio')
    
    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/search")
                .setAllowedOrigins("*")
                .setHandshakeHandler(new DefaultHandshakeHandler())
                .withSockJS();
    }