0

我尝试将 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() 时,它失败并从日志中得到错误,如下所示

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

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

4

1 回答 1

0

我通过更改 servlet 顺序(如首先是 cometd servlet 和其次是调度程序 servlet)来解决此问题。调度程序 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。谢谢你

于 2013-08-29T16:50:27.393 回答