gpt4 book ai didi

java - Spring:Servlet 3.1 + SockJS = 必须启用异步支持

转载 作者:太空宇宙 更新时间:2023-11-04 12:24:31 24 4
gpt4 key购买 nike

我已将 Spring MVC 配置从 XML 切换为 JavaConfig,并将 Websocket 与 SockJS 集成。

我的问题是,带有 websocket 的应用程序和配置在“localhost”(tomcat 8.0.36)上运行良好。但是,当我将 war 包上传到我的服务器(tomcat 8.0.32)时,websocket 连接失败,并显示以下错误代码:

Failed to open session; nested exception is java.lang.IllegalArgumentException: Async support must be enabled on a servlet and for all filters involved in async request processing. This is done in Java code using the Servlet API or by adding "true" to servlet and filter declarations in web.xml. Also you must use a Servlet 3.0+ container] with root cause java.lang.IllegalArgumentException: Async support must be enabled on a servlet and for all filters involved in async request processing. This is done in Java code using the Servlet API or by adding "true" to servlet and filter declarations in web.xml. Also you must use a Servlet 3.0+ container

我不确定造成这种情况的原因是什么。

请参阅下面的初始化程序:

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 中启用了异步“@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 文档,但没有找到任何原因,为什么应用程序不能在服务器上运行,而是在本地主机上运行:-(

在我的本地主机上,我直接访问 tomcat,并通过 AJP 连接器访问服务器。也许必须在 AJP 连接器中启用某些功能才能支持异步请求?ajp 连接器和 apache web 服务器被暂时禁用,我直接使用 tomcat url (:8080) 访问我的项目..但同样的错误:-/

最佳答案

我解决了我的问题;-)

将我的 apache tomcat vom 版本从 8.0.32 升级到 8.5.4 后,现在一切正常。我能够与 websockets 通信并使用 ajp .. 因此,请不要使用 8.0.32 并选择 >= 8.5.4。

关于java - Spring:Servlet 3.1 + SockJS = 必须启用异步支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38510435/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com