Verwenden einer WebSocket-API mit Struts 2

Auf Tomcat 7.0.43 wird eine Struts2-Webanwendung ausgeführt, die Rest- und Convention-Plug-ins verwendet, um alle Anforderungen zuzuordnen. Struts versucht, alle Anforderungen selbst zuzuordnen.

JSR 356 definiert Server-Endpunkte mit Anmerkungen wie

@ServerEndpoint(value = "/websocket/chat")

Jetzt, wenn der Browser versucht, eine Verbindung herzustellenws:/127.0.0.1:8080/websocket/chatschlägt die Anforderung fehl, da der Struts-Mapper die Anforderung abfängt.

Gibt es irgendetwas, das ich in den XML-Dateien angeben kann, damit die Anfrage den richtigen Ort erreicht?

BEARBEITEN:

Wie vorgeschlagen, fügte ich hinzu

<constant name="struts.action.excludePattern" value="/websocket.*?" />

zu meiner Struts-Konfiguration, nach der die URL / der Websocket / der Chat einen 404-Fehler erreichte.

Später erfuhr ich, dass ich ein konfigurieren mussServerApplicationConfig Implementierung. Danach funktioniert der Websocket einwandfrei, aber der Rest meiner Anwendung wird nicht geladen, was zu einem Fehler führt:

SEVERE: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener

Hier ist meine Klasse:

public class Socket implements ServerApplicationConfig {

    @Override
    public Set<ServerEndpointConfig> getEndpointConfigs(Set<Class<? extends Endpoint>> scanned) {

        Set<ServerEndpointConfig> result = new HashSet<ServerEndpointConfig>();

        return result;
    }

    @Override
    public Set<Class<?>> getAnnotatedEndpointClasses(Set<Class<?>> scanned) {

        Set<Class<?>> results = new HashSet<Class<?>>();
        for (Class<?> clazz : scanned) {
            results.add(clazz);
        }
        return results;
    }
}

Wie kann ich alles in Harmony zusammenbringen?

Hinweis: Ich verwende das Struts Spring Plugin für die Abhängigkeitsinjektion von Spring Security.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage