我已将Spring的MVC配置从XML切换到JavaConfig,并将Websocket与SockJS集成。
我的问题是,使用websocket的应用程序和配置在“localhost”(tomcat 8.0.36)上运行正常。但是当我将war包上传到我的服务器(tomcat 8.0.32)时,websocket连接失败并出现以下错误代码:
无法打开会话;嵌套异常是java.lang.IllegalArgumentException:必须在servlet和异步请求处理中涉及的所有过滤器上启用异步支持。这是使用Servlet API在Java代码中完成的,或者在web.xml中向servlet和过滤器声明添加“true”。此外,您必须使用具有根本原因的Servlet 3.0+容器 java.lang.IllegalArgumentException:必须在servlet和异步请求处理中涉及的所有过滤器上启用异步支持。这是使用Servlet API在Java代码中完成的,或者在web.xml中向servlet和过滤器声明添加“true”。您还必须使用Servlet 3.0+容器
我不确定这种情况的原因是什么。
请参阅下面的初始化程序:
public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected void customizeRegistration(ServletRegistration.Dynamic registration) {
registration.setInitParameter("dispatchOptionsRequest", "true");
registration.setAsyncSupported(true);
}
protected Class<?>[] getRootConfigClasses() {
return new Class[] { MyAppConfiguration.class, MyAppSecurityConfiguration.class };
}
protected Class<?>[] getServletConfigClasses() {
return null;
}
protected String[] getServletMappings() {
return new String[]{"/"};
}
protected Filter[] getServletFilters() {
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setEncoding("UTF-8");
return new Filter[] { characterEncodingFilter,
new DelegatingFilterProxy("springSecurityFilterChain").s};
}
}
在MyAppConfiguration.class中启用了async“@EnableAsync”:
@EnableWebMvc
@EnableScheduling
@EnableAsync
@EnableCaching
@ComponentScan(basePackages="...")
@Configuration
public class MyAppConfiguration extends WebMvcConfigurerAdapter {
在pom.xml中我加载了javax.servlet-api
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
我检查了spring文档,但没有找到任何理由,为什么应用程序不能在服务器上运行,而是在localhost上: - (
在我的localhost上,我通过AJP连接器直接访问tomcat和服务器。也许必须在AJP连接器中启用某些东西才能支持异步请求? ajp连接器和apache webserver被暂时禁用,我直接用tomcat url(:8080)访问我的项目..但同样的错误: - /
答案 0 :(得分:0)
我解决了我的问题; - )
将我的apache tomcat vom版本从8.0.32升级到8.5.4之后,现在都可以了。我能够与websockets通信并使用ajp ..所以,请不要使用8.0.32并选择&gt; = 8.5.4。