2016-05-17 52 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端點連接請求我有這是必要的成立後立即關閉。

相關問題