Spring mvc 4.0.5 长轮询示例
Posted
技术标签:
【中文标题】Spring mvc 4.0.5 长轮询示例【英文标题】:Spring mvc 4.0.5 long polling example 【发布时间】:2014-07-02 14:55:19 【问题描述】:我正在尝试在春季使用 DeferedResult 实现长轮询。我正在尝试从春天开始,https://github.com/rstoyanchev/spring-mvc-chat
我正在按照字母的配置(几乎,见下文)。当我启动它时,我得到了:
HTTP 状态 500 - 请求处理失败;嵌套异常是 java.lang.IllegalStateException:必须在 servlet 和异步请求处理中涉及的所有过滤器上启用异步支持。这可以在 Java 代码中使用 Servlet API 或通过在 web.xml 中的 servlet 和过滤器声明中添加“true”来完成。
来自:StandardServletAsyncWebRequest。
我的配置类:
public class MVCInitializer extends AbstractAnnotationConfigDispatcherServletInitializer
@Override
protected Class<?>[] getRootConfigClasses ()
return null;
@Override
protected Class<?>[] getServletConfigClasses()
return new Class<?>[] WebMvcConfig.class, PresentationConfig.class, SecurityConfig.class, EmailConfig.class ;
@Override
protected String[] getServletMappings ()
return new String[] "/" ;
@Override
protected void customizeRegistration(Dynamic registration)
registration.setAsyncSupported(true);
@Override
protected boolean isAsyncSupported ()
return true;
@Configuration
@EnableWebMvc
@EnableAsync
@ComponentScan (basePackages = "com.xxx.presentation" )
public class WebMvcConfig extends WebMvcConfigurerAdapter
private static final Log log = LogFactory.getLog(WebMvcConfig.class);
@Override
public void configureAsyncSupport (AsyncSupportConfigurer configurer)
configurer.setDefaultTimeout(30 * 1000L);
public void addViewControllers (ViewControllerRegistry registry)
registry.addViewController("/").setViewName("teledetailer");
@Override
public void addResourceHandlers (ResourceHandlerRegistry registry)
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
registry.addResourceHandler("/css/**").addResourceLocations("/css/");
registry.addResourceHandler("/images/**").addResourceLocations("/images/");
registry.addResourceHandler("/js/**").addResourceLocations("/js/");
@Bean
public ViewResolver viewResolver ()
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setViewClass(JstlView.class);
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".jsp");
return viewResolver;
@Override
public void addReturnValueHandlers (List<HandlerMethodReturnValueHandler> returnValueHandlers)
List<HttpMessageConverter<?>> messageConverters = new ArrayList<>();
messageConverters.add(new StringHttpMessageConverter());
messageConverters.add(new MappingJackson2HttpMessageConverter());
returnValueHandlers.add(new RequestResponseBodyMethodProcessor(messageConverters));
super.addReturnValueHandlers(returnValueHandlers);
我正在使用:
Java 7 雄猫 7.0.54 春季 4.0.5
任何帮助将不胜感激。缺乏像样的例子真的很令人沮丧。 p.s.如果我尝试启用异步支持的地方太多了 - 别担心,我只是想弄清楚它应该如何完成。
谢谢,希望你能帮助我。
【问题讨论】:
【参考方案1】:在向 Rossen Stoyanchev 寻求帮助后(好人,非常感谢他!),他指出我的 web.xml 中有 springSecurityFilterChain,所以这个也需要配置为异步支持:
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<async-supported>true</async-supported>
</filter>
希望对遇到同样问题的其他人有所帮助。
【讨论】:
以上是关于Spring mvc 4.0.5 长轮询示例的主要内容,如果未能解决你的问题,请参考以下文章