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/chat
schlä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.