日期:2014-05-16  浏览次数:20599 次

Tomcat7使用ActiveMQ AjaxServlet时,发生Not supported. exception

Tomcat6上使用ActiveMQ AjaxServlet时,完全没有问题

但是,Tomcat7使用ActiveMQ AjaxServlet时,发生Not supported. exception

具体版本:

Tomcat 7.0.41

ActiveMQ 5.6.0

具体的问题描述,参看以下URL

http://activemq.2283324.n4.nabble.com/AjaxServlet-on-Tomcat-td3601798.html

?

网上搜索了很多方案,都说只要对AjaxServlet加上async-supported支持就可以了。

但是,实际结果还是报同样的异常。

经过长时间的尝试,终于找到问题的原因了。

原来消息请求在AjaxServlet处理前,会先被filter先处理,所以filter也要加上async-supported支持。

具体配置代码如下:

web.xml

	<!-- ActiveMQ servlet -->
    <servlet>
        <servlet-name>AjaxServlet</servlet-name>
        <servlet-class>org.apache.activemq.web.AjaxServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
        <async-supported>true</async-supported>
    </servlet>
    <servlet-mapping>
        <servlet-name>AjaxServlet</servlet-name>
        <url-pattern>/amq/*</url-pattern>
    </servlet-mapping>

	<!-- 著名 Character Encoding filter -->
	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<async-supported>true</async-supported>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<!-- 强制进行转码 -->
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<!-- ActiveMQ -->
    <filter>
      <filter-name>session</filter-name>
      <filter-class>org.eclipse.jetty.continuation.ContinuationFilter</filter-class>
      <async-supported>true</async-supported>
    </filter>
    <filter-mapping>
      <filter-name>session</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>

?

?

?

?