Ich habe meine Spring MVC-Konfiguration von XML zu JavaConfig und integrierten Websocket mit SockJS umgeschaltet.Spring: Servlet 3.1 + SockJS = Async-Unterstützung muss aktiviert sein
Mein Problem ist, dass die Anwendung mit Websocket und die Konfiguration funktioniert gut auf "localhost" (Tomcat 8.0.36). Aber wenn ich das War-Paket auf meinen Server hochlade (Tomcat 8.0.32), schlägt die Websocket-Verbindung mit dem folgenden Fehlercode fehl:
Fehler beim Öffnen der Sitzung; Die verschachtelte Ausnahme ist java.lang.IllegalArgumentException: Die Async-Unterstützung muss für ein Servlet und für alle Filter aktiviert werden, die an der asynchronen Anfrageverarbeitung beteiligt sind. Dies geschieht in Java-Code mithilfe der Servlet-API oder durch Hinzufügen von "true" zu Servlet- und Filterdeklarationen in web.xml. Außerdem müssen Sie einen Servlet 3.0+ Container verwenden] mit der Grundursache java.lang.IllegalArgumentException: Die Async-Unterstützung muss für ein Servlet und für alle Filter aktiviert werden, die an der asynchronen Anfrageverarbeitung beteiligt sind. Dies geschieht in Java-Code mithilfe der Servlet-API oder durch Hinzufügen von "true" zu Servlet- und Filterdeklarationen in web.xml. Außerdem müssen Sie einen Servlet 3.0+ Container verwenden
Ich bin mir nicht sicher, was der Grund für diese Situation ist.
unter meinem Initializer Siehe:
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};
}
}
In MyAppConfiguration.class async wurde aktiviert "@EnableAsync":
@EnableWebMvc
@EnableScheduling
@EnableAsync
@EnableCaching
@ComponentScan(basePackages="...")
@Configuration
public class MyAppConfiguration extends WebMvcConfigurerAdapter {
Im pom.xml laden i die javax. servlet-api
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
Ich habe die SpringDocs überprüft aber keinen Grund gefunden, warum die Applikation nicht auf dem Server läuft, sondern auf localhost :-(
Auf meinem localhost greife ich direkt auf den Tomcat und über den AJP Connector auf den Server . Vielleicht muss etwas im AJP-Connector aktiviert sein, um eine asynchrone Anfrage zu unterstützen? Der AJP-Konnektor und Apache-Webserver war vorübergehend deaktiviert und ich mein Projekt mit dem Kater URL direkt zugegriffen wird (: 8080) .. aber die gleichen Fehler: -/