cometd spring / cometd / handshake不支持请求方法'POST'

时间:2013-08-28 12:19:59

标签: spring spring-mvc annotations cometd appfuse

尝试将cometd(spring-jquery-jetty7)与appfuse spring MVC项目集成。

我的web.xml是

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>2</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/app/*</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>cometd</servlet-name>
    <servlet-class>org.cometd.server.CometdServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>cometd</servlet-name>
    <url-pattern>/cometd/*</url-pattern>
</servlet-mapping>

并做了所有其他配置,如spring-jquery-jetty7示例,当我从脚本中尝试cometd.handshake()时,它失败并从日志中得到错误,如下所示

WARN [http-8080-6] PageNotFound.handleHttpRequestMethodNotSupported(183)|请求方法“POST”不受支持     115117 [http-8080-6] WARN org.springframework.web.servlet.PageNotFound - 请求方法POST'不支持

有人经历过这个吗?希望调度程序servlet处理请求而不是cometd servlet,我不知道这里有什么错误,欢迎提出这方面的建议。     谢谢

1 个答案:

答案 0 :(得分:0)

我通过改变servtd命令来解决这个问题,比如cometd servlet first和dispatcher servlet second。调度程序servlet首先处理cometd请求并始终抛出错误,因此我更改了如下的顺序

 <servlet>
   <servlet-name>cometd</servlet-name>
   <servlet-class>org.cometd.server.CometdServlet</servlet-class>
   <load-on-startup>1</load-on-startup>
 </servlet>

<servlet-mapping>
   <servlet-name>cometd</servlet-name>
   <url-pattern>/cometd/*</url-pattern>
</servlet-mapping>

<servlet>
  <servlet-name>dispatcher</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>2</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>dispatcher</servlet-name>
  <url-pattern>/app/*</url-pattern>
</servlet-mapping>

并添加load-on-startup以在应用程序启动时初始化comet servlet。谢谢