tomcat中使用异步servlet要点

来源:互联网 发布:淘宝店铺叫什么名字好 编辑:程序博客网 时间:2024/05/17 00:55
本人使用tomcat7.0.64 ,jdk1.8完成配置。


1.tomcat版本

   要使用支持servlet3.0标准的tomcat,这是异步请求的基本要求

2.配置应用程序,在servlet和filter中都配置<async-supported>true</async-supported>标记,类似如下:

<servlet><description>spring mvc servlet</description><servlet-name>spring_mvc_dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath*:META-INF/spring/spring-mvc.xml</param-value></init-param><load-on-startup>2</load-on-startup><async-supported>true</async-supported></servlet>

<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></filter>

如果使用ShiroFilter,那么还要加入:<dispatcher>ASYNC</dispatcher>

<filter-mapping><filter-name>shiroFilter</filter-name><url-pattern>/*</url-pattern><dispatcher>REQUEST</dispatcher><dispatcher>ASYNC</dispatcher></filter-mapping>

以上是springmvc使用的基本配置,如果是普通servlet,配置是一样的。只要异步用到的servlet,filter都需要增加<async-supported>true</async-supported>配置。应用的配置都一样,没什么特殊的。

  3.其他配置

    如果以上两步都做完了,还有Async support must be enabled on a servlet and for all filters的这种错误,意思大致还是没有配置。就要找其他原因了。

   例如,我遇到过一个问题,uat环境的程序报Async support must be enabled on a servlet and for all filters。。。错误,但是jdk,tomcat版本和测试都完全一样。测试环境可以通过,但uat不行。最后借助google才解决了问题。说句题外话,百度,bing都解决不了这个,呵呵。

   最后查找到uat环境的tocmat使用了redis进行session共享,在tomcat/conf/context.xml中有这样一句配置:

<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
没有配置异步支持,Value中加上asyncSupported="true"属性,就可以解决了。

原创粉丝点击