2016-05-17 50 views
1

我试图做一个简单的websocket聊天,也使用Spring MVC。
源代码在这里我的仓库可在GitHub
它由以下几部分组成:
欢迎视图页面index.jsp中包含了用户的昵称和密码进入,并将其绑定到新的用户实例形式。
Java Spring MVC WebSocket应用程序仅适用于本地应用程序服务器,但不适用于openshift主机

Welcome page

用户实例传递给Spring MVC的控制器MainController.java。 Controller创建链接到chat.jsp的新ModelAndView,并将User实例传递给它,以便在标题和聊天窗口中显示用户的昵称。 chat.jsp包含提供与Chat.java中websocket端点连接的js代码。它还将用户的nikname传递给端点以将其存储在其字符串字段中。
当我在我的本地Tomcat 8上试用它时,一切正常,就像预期的那样。

working chat

这是请求和网页套接字端点连接的响应。 enter image description here

但是,当我在OpenShift的Tomcat 7远程主机上尝试它时,它不起作用。
以下是截图:

enter image description here enter image description here

正如你可以看到用户的昵称是不会显示在页眉和不获通过与请求URL的端点。
看来,即使是用户实例还没有从Spring MVC控制器传递到chat.jsp视图页面。
有人可以请解释我做错了什么吗?

+0

什么是您的本地应用程序服务器? –

+0

正如我所提到的,它是Tomcat 8. –

回答

2

我看到两个问题有:

  1. Ws和WSS端口 - use ports 8000 or 8443对OpenShift网络套接字连接。我建议修改您的chat.jsp

    Chat.initialize = function() { 
        if (window.location.protocol == 'http:') { 
        Chat.connect('ws://' + window.location.host + ':8000/websocket/chat/${user.nickname}'); 
        } else { 
        Chat.connect('wss://' + window.location.host + ':8443/websocket/chat/${user.nickname}'); 
        } 
    }; 
    
  2. Tomcat服务器版本。您可以使用this quick-start在OpenShift Online上运行Tomcat 8。然而,当我尝试使用快速启动时,我遇到了一些麻烦,所以我改变了一些东西并创建了一个PR;在合并之前,你可以从here获得一个适用于我的版本。为了在小型DIY设备上部署Tomcat 8,您可以使用以下命令:rhc app create tomcat8 diy --from-code https://github.com/jiri-fiala/openshift-tomcat8-quickstart。将tomcat8替换为您的应用所需的名称。请注意,这将需要几分钟的时间下载并编译Tomcat的8

跟tomcat 8上运行OpenShift,我部署你的代码为ROOT.war(我已经创建了本地使用mvn package包),使用Tomcat的网页界面。测试聊天应用程序似乎很好。

当然,这不是一个很理想的部署; Web应用程序以这种方式部署到数据目录。OpenShift Online目前不提供Tomcat 8磁带盒,您可以将代码推入回购站并让您的Web应用程序自动构建和部署。

+0

感谢您的建议。但我不想在OpenShift上运行Tomcat 8,我只是想修改我的代码以使其在Tomcat 7上工作。但是,我按照您的建议将端口号添加到websocket端点连接请求中。现在我的chat.jsp已连接到端点。但是这种关系在建立之后就已经关闭了。 –

+0

有没有其他方法可以将端口号添加到请求中?因为现在应用程序不能在本地主机上工作,因为websocket连接请求现在看起来像ws:// lockalhost:8080:8000/websocket ...。 –

+1

我建议开发在Tomcat 7的代码在本地,然后再硬编码的连接字符串在远程的Tomcat 7部署 - 你可以检查你在例如运行环境基于[环境变量,这些变量上OpenShift](https://developers.openshift.com/managing-your-applications/environment-variables.html)不当地使用,或者完全存储在环境变量中的连接字符串,其你会[在OpenShift上设置](https://developers.openshift.com/managing-your-applications/environment-variables.html#custom-variables)和本地独立于代码。 –

0

一个问题已经解决。现在,用户昵称显示在视图标题中,并且还通过连接请求传递给websocket端点。
我刚刚在chat.jsp中添加了一行<%@ page isELIgnored="false" %>以使表达式语言能够正常工作。 enter image description here enter image description here
但聊天仍不能正常工作,因为连接有:出于某种原因,如果你使用Tomacat 7
所以现在添加端口号后的WebSocket端点连接请求我有这是必要的成立后立即关闭。

相关问题