用Javascript在javawebapp上实现类似facebook的聊天

用Javascript在javawebapp上实现类似facebook的聊天,javascript,jakarta-ee,xmpp,strophe,Javascript,Jakarta Ee,Xmpp,Strophe,我是XMPP新手,但我需要在web应用程序上创建类似facebook的聊天。 该应用程序是一个使用JavaEE7编写的webapp,带有JSP、struts2和tiles,使用Tomcat服务器 我读了一些关于如何实现该功能的文章,我发现了一些解决方案 在我看来,最好的(因为它最容易)使用方法是: JavaScript strophe和Bosh技术。我想在web应用程序中获得授权后从java连接Bosh,接下来,我计划使用Bosh会话从Strophe连接Bosh 我的主要问题是: 当访问者更改站

我是XMPP新手,但我需要在web应用程序上创建类似facebook的聊天。 该应用程序是一个使用JavaEE7编写的webapp,带有JSP、struts2和tiles,使用Tomcat服务器

我读了一些关于如何实现该功能的文章,我发现了一些解决方案 在我看来,最好的(因为它最容易)使用方法是: JavaScript strophe和Bosh技术。我想在web应用程序中获得授权后从java连接Bosh,接下来,我计划使用Bosh会话从Strophe连接Bosh

我的主要问题是: 当访问者更改站点时,实施是否有效? 当他在主页上并选中设置时。 用户登录webapp时,Bosh会话是否会一直持续

我不想使用WebSocket和Atmosphere,因为我需要在项目中做很多更改,我想我无法应对

如果这是个好主意,你有什么建议吗? 谢谢你的帮助

编辑:

我决定使用Atmosphere,我使用tomcat和JavaEE7

首先,我尝试运行任何大气示例。当我把它作为一个新的应用程序在tomcat上运行时,它可以工作,但是当我用struts将它添加到我的应用程序中时,我可能遇到了web.xml的问题 我的文件如下所示:

web.xml:

    <!-- Atmosphere -->
    <servlet>
        <description>AtmosphereServlet</description>
        <servlet-name>AtmosphereServlet</servlet-name>
        <servlet-class>org.atmosphere.cpr.AtmosphereServlet</servlet-class>
        <async-supported>true</async-supported>
        <!-- Use it with mvn jetty:run -->
        <init-param>
            <param-name>org.atmosphere.cpr.packages</param-name>
            <param-value>org.atmosphere.samples</param-value>
        </init-param>
        <load-on-startup>0</load-on-startup>
    </servlet>
  <!-- Atmosphere Mapping-->
   <servlet-mapping>
        <servlet-name>AtmosphereServlet</servlet-name>
        <url-pattern>/chat/*</url-pattern>
    </servlet-mapping>

    ...     

    <!-- Filters -->
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
        <init-param>
            <param-name>actionPackages</param-name>
            <param-value>com.comarch</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>*.do</url-pattern>
    </filter-mapping>

    ...
当我访问我的网站时,我可以在控制台中看到错误:

WebSocket连接到
ws://localhost:8081/chat?X-atmospher-tracking-id=0&X-atmospher-Framework=2.1.2-jquery&X-atmospher-Transport=websocket&X-Cache-Date=0&Content-Type=application%2Fjson&X-atmo-protocol=true失败:websocket握手过程中出错:意外响应代码:501
如果您可以用JavaScript执行,选通功能。这取决于你决定什么对你的网站是最好的。在后端用Java进行初始身份验证,并将会话信息传递给Strophe,然后附加。当用户更改页面时,您可以重新连接到现有的Bosh会话(您必须跟踪页面之间的RID)

请参阅:举个例子。

最好的解决方案可能是基于意见的,但我认为用Erlang编写是最好的解决方案,正如Facebook所做的那样,但websockets也是一个不错的选择,而在服务器端用带有XMLHttpRequest和Java的纯javascript编写它听起来根本不是最好的解决方案,但这肯定是可行的。
var request = { url: 'http://localhost:8081/chat/',