Struts2 和 Comet url 模式冲突
Struts2 and Comet url pattern conflict
我正在尝试将 comet chat 集成到我的 struts2+hibernate 应用程序中。首先,我在单独的 web 应用程序中测试了 comet chat。它工作正常。我从 http://skillshared.blogspot.in/2012/10/facebook-similar-chat-for-your-java-web.html 下载它,然后我尝试在我的应用程序
中实现
我在 web.xml 中的问题是我的 web.xml 文件
<context-param>
<param-name>org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG</param-name>
<param-value>/WEB-INF/tiles.xml</param-value>
</context-param>
<listener>
<listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class>
</listener>
<display-name>Cometd Test WebApp</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Portability Filter, needed only to run on non Jetty
or non Servlet-3.0 containers like Tomcat-->
<filter>
<filter-name>continuation</filter-name>
<filter-class>org.eclipse.jetty.continuation.ContinuationFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>continuation</filter-name>
<url-pattern>/cometd/*</url-pattern>
</filter-mapping>
<!-- Cometd Servlet -->
<servlet>
<servlet-name>cometd</servlet-name>
<servlet-class>org.cometd.annotation.AnnotationCometdServlet</servlet-class>
<init-param>
<param-name>timeout</param-name>
<param-value>20000</param-value>
</init-param>
<init-param>
<param-name>interval</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>maxInterval</param-name>
<param-value>10000</param-value>
</init-param>
<init-param>
<param-name>maxLazyTimeout</param-name>
<param-value>5000</param-value>
</init-param>
<init-param>
<param-name>long-polling.multiSessionInterval</param-name>
<param-value>2000</param-value>
</init-param>
<init-param>
<param-name>logLevel</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>transports</param-name>
<param-value>org.cometd.websocket.server.WebSocketTransport</param-value>
</init-param>
<init-param>
<param-name>services</param-name>
<param-value>com.semika.cometd.ChatService</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>cometd</servlet-name>
<url-pattern>/cometd/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
上面的代码应用程序工作正常但聊天不工作。我看到了很多关于这个问题的帖子,我有一个解决方案
<URL-pattern>*.action</URL-pattern>
当我尝试进行此聊天时,它工作正常,但应用程序不工作。当我只有 place 应用程序工作时。
<url-pattern>/*</url-pattern>
我也在 struts.xml 中尝试过这个,但没有用。
<constant name="struts.action.excludePattern" value="/cometd/*,/cometd/.*"/>
问题的原因可能是什么?
整个事情取决于您的 Struts 版本。如果您有旧版本,出于多种原因,尤其是安全修复,您应该迁移到新版本。
但是,考虑到:
随着 Struts >= 2.1.3,FilterDispatcher
已弃用,新的 StrutsPrepareAndExecuteFilter
必须使用。 Read more
Struts <= 2.1.6,struts.action.excludePattern
不存在。 Read more
你的代码不可能工作;)
我正在尝试将 comet chat 集成到我的 struts2+hibernate 应用程序中。首先,我在单独的 web 应用程序中测试了 comet chat。它工作正常。我从 http://skillshared.blogspot.in/2012/10/facebook-similar-chat-for-your-java-web.html 下载它,然后我尝试在我的应用程序
中实现我在 web.xml 中的问题是我的 web.xml 文件
<context-param>
<param-name>org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG</param-name>
<param-value>/WEB-INF/tiles.xml</param-value>
</context-param>
<listener>
<listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class>
</listener>
<display-name>Cometd Test WebApp</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Portability Filter, needed only to run on non Jetty
or non Servlet-3.0 containers like Tomcat-->
<filter>
<filter-name>continuation</filter-name>
<filter-class>org.eclipse.jetty.continuation.ContinuationFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>continuation</filter-name>
<url-pattern>/cometd/*</url-pattern>
</filter-mapping>
<!-- Cometd Servlet -->
<servlet>
<servlet-name>cometd</servlet-name>
<servlet-class>org.cometd.annotation.AnnotationCometdServlet</servlet-class>
<init-param>
<param-name>timeout</param-name>
<param-value>20000</param-value>
</init-param>
<init-param>
<param-name>interval</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>maxInterval</param-name>
<param-value>10000</param-value>
</init-param>
<init-param>
<param-name>maxLazyTimeout</param-name>
<param-value>5000</param-value>
</init-param>
<init-param>
<param-name>long-polling.multiSessionInterval</param-name>
<param-value>2000</param-value>
</init-param>
<init-param>
<param-name>logLevel</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>transports</param-name>
<param-value>org.cometd.websocket.server.WebSocketTransport</param-value>
</init-param>
<init-param>
<param-name>services</param-name>
<param-value>com.semika.cometd.ChatService</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>cometd</servlet-name>
<url-pattern>/cometd/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
上面的代码应用程序工作正常但聊天不工作。我看到了很多关于这个问题的帖子,我有一个解决方案
<URL-pattern>*.action</URL-pattern>
当我尝试进行此聊天时,它工作正常,但应用程序不工作。当我只有 place 应用程序工作时。
<url-pattern>/*</url-pattern>
我也在 struts.xml 中尝试过这个,但没有用。
<constant name="struts.action.excludePattern" value="/cometd/*,/cometd/.*"/>
问题的原因可能是什么?
整个事情取决于您的 Struts 版本。如果您有旧版本,出于多种原因,尤其是安全修复,您应该迁移到新版本。
但是,考虑到:
随着 Struts >= 2.1.3,
FilterDispatcher
已弃用,新的StrutsPrepareAndExecuteFilter
必须使用。 Read moreStruts <= 2.1.6,
struts.action.excludePattern
不存在。 Read more
你的代码不可能工作;)