Server-Java-Spring Websockets

ff_java

Mitglied
Hallo Zusammen,
ich versuche eine kleine Chat Applikation zu entwickeln, und bin dabei folgendem Tutorial gefolgt. (https://www.callicoder.com/spring-boot-websocket-chat-example/)
Nun ist allerdings die Anforderung die Clientseite aus dem Projekt auszugliedern, bevor der Service deployt wird. Also das ich die Index.html, main.css und die main.js getrennt lagere. Nun weiß ich allerdings nicht was ich tun muss, um den Client wieder mit dem Server zu verbinden.
Muss hier ein Pfad angepasst werden, z.B. beim new SockJS(...) oder wie stelle ich diese Verbindung her.
Kann mir hier vielleicht jemand weiterhelfen?
Vielen Dank
Beste Grüße
Florian
 
K

kneitzel

Gast
Also wenn ich Dich richtig verstanden habe, dann willst Du die statischen Dinge nicht mehr per spring boot ausliefern sondern über einen anderen Server (z.B. ein apache Webserver oder lokale Dateien).

Nach meinem Verständnis sollte es da dann ausreichen, die entsprechende URL anzugeben, so wie es z.B. bei https://github.com/sockjs/sockjs-client angegeben wurde.

Also statt dem bisher hart kodierten /ws muss es dann halt ein http://localhost:8080/ws oder so sein. In der Applikation macht da der Browser einiges selbst, aber wenn Auslieferung der Seite und der Web Socket getrennt sind, dann musst Du die korrekte URL halt selbst angeben.
 
K

kneitzel

Gast
Kannst Du Details nennen?
a) Was ist Deine genaue Konfiguration? Also zum einen genau die Seite - was hast Du genau geändert? Welche URL hast du genau angegeben und so.
b) Wie ist dein genaues Vorgehen? (Also ich hoffe mal, dass Du die Spring Boot Applikation auch gestartet hast und so ...)
c) Was ist der genaue Fehler? onError bekommt doch auch einen Fehler ausgegeben. Und siehst Du etwas bei der Console der Spring Boot Applikation?

Es kann sich auch lohnen, einfach im Browser die Entwickler Konsole zu öffnen. Da bekommt man Fehler auch meist gut angezeigt und kann Requests sowie die Antworten nachvollziehen und so ...

Also ich würde jetzt raten, dass es ein Security Thema ist, da Du nun einen anderen Server ansprichst, als die Seite geladen wurde. Das wird spring boot per default nicht mögen. Das wirst Du aber bestimmt im Detail sagen können. Das was ich meine, würde ich z.B. unter https://developer.mozilla.org/de/docs/Web/HTTP/CORS nachlesen lassen (So es diese Problematik ist.)
 
K

kneitzel

Gast
Ok, ich habe jetzt einmal die Zeit gefunden, das selbst einmal auszuprobieren.

Meine Vermutung stimmte, es ist das vermutete Problem. Dieses konkrete Problem lässt sich lösen durch eine kleine Anpassung der WebSocketConfig, in der eine Methode leicht angepasst werden muss:

Code:
    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/ws").setAllowedOrigins("*").withSockJS();
    }

Das setAllowedOrigins ist hinzu gekommen.

Evtl. hilft es Dir, wenn ich kurz mein Vorgehen umschreibe:
- Den Beispielcode von https://github.com/callicoder/spring-boot-websocket-chat-demo herunter geladen, entpackt und gestartet
- Die Verzeichnisstruktur aus dem static Verzeichnis in ein temp Verzeichnis kopiert.
- In der HTML Seite die Links zum css und zur js jeweils am Anfang mit einem . versehen (also Start mit "./" statt nur mit "/")
- Aufruf der HTML Seite aus dem temp Verzeichnis heraus mit Chrome, Developer .
==> "Access to XMLHttpRequest at 'http://localhost:8080/ws/info?t=1589867374734' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource." (Danach wird sich bestimmt gut in Google suchen lassen.

Das mit dem setAllowedOrigins ist dann eine einfache Lösungsmöglichkeit. Das dürfte wohl auch in den meisten Anleitungen / Tutorials so auftauchen meine ich (Sowas meine ich zumindest am öftesten gelesen zu haben, aber ich möchte mich da nicht unbedingt festlegen. Da kennen sich andere evtl. noch deutlich besser aus und halten ggf. andere Lösungen für besser..).
 

ff_java

Mitglied
Hallo,
vielen Dank für die Antwort. Mit dieser Änderung funktioniert das.
Ich habe auch mal deine Schritte ausgeführt und verstehe es jetzt schon besser.
Vielleicht kannst du mir auch spontan bei meinem zweiten Problem in diesem Kontext helfen. Ich werde auch wie von dir beschrieben ganz explizit auf die Problematik eingehen und Details nennen.
Ich möchte den Client in einem Typescript Projekt nutzen und das Ganze mit Webpack bündeln. Aktuell wird ja im Javascript-Code SockJS und Stomp für die Erstellung eines Clients genutzt:
Code:
     var socket = new SockJS('/ws');
     stompClient = Stomp.over(socket);
     stompClient.connect({}, onConnected, onError);
Wenn ich nun das Ganze mit Typescript und Webpack nutzen möchte, muss ich ja entsprechende imports für SockJS und Stomp bereitstellen.
Bei meiner Recherche schien es mir am besten auf sockjs-client (https://github.com/sockjs/sockjs-client) und stompjs (https://github.com/stomp-js/stompjs) zurückzugreifen. Genutzt werden könnte dies ja über
Code:
import * as SockJS from 'sockjs-client';
import * as Stomp from 'stompjs';
Vorher habe ich entsprechend die Installation vorgenommen und die Typings installiert
Code:
npm i sockjs-client --save
npm i stompjs --save

Wenn ich allerdings new SockJS('http://localhost:8080/ws') erstellen möchte, kommt folgende Fehlermeldung:
This expression is not constructable.
Type '{ default: { (url: string, _reserved?: any, options?: Options | undefined): WebSocket; new (url: string, _reserved?: any, options?: Options | undefined): WebSocket; ... 4 more ...; CLOSED: 3; }; ... 4 more ...; CLOSED: 3; }' has no construct signatures.ts(2351)
communication.component.ts(9, 1): Type originates at this import. A namespace-style import cannot be called or constructed, and will cause a failure at runtime. Consider using a default import or import require here instead.

Auch finde ich keine Verbindung dieser beiden Bibliotheken, um die bisherige Logik entsprechend umzusetzen.

Falls du mir auch hierbei eine Lösung nennen kannst, wäre ich sehr dankbar.
Beste Grüße
 
K

kneitzel

Gast
Also mit Typescript kann ich nicht wirklich helfen. Ich bin in erster Linie auf dem Backend zuhause....

Aber wenn ich mir die Doku etwas ansehe (StompJS habe ich z.B. https://stomp-js.github.io/guide/stompjs/using-stompjs-v5.html gefunden), dann sieht es etwas anders aus.

Da findet man für TypeScript ein Import, der etwas anders aussieht. Und auch der Code sieht da komplett anders aus ... aber das kann ich nicht weiter bewerten, da Ich in TypeScript bisher nichts groß gemacht habe ....
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Dimax Spring App Probleme beim Ausführen auf dem Tomcat Server Frameworks - Spring, Play, Blade, Vaadin & Co 1
8u3631984 eureka server in Gradle Projekt kann Methoden nicht finden Frameworks - Spring, Play, Blade, Vaadin & Co 5
Robertop Springboot Server kann Jakarta Persistence Root nicht installieren? Frameworks - Spring, Play, Blade, Vaadin & Co 0
Christopher865 Netflix Eureka: Zwei Server - Einer stürtzt ab Frameworks - Spring, Play, Blade, Vaadin & Co 6
Zrebna Vaadin mit Jetty Server -> ERROR: Jetty server existing Frameworks - Spring, Play, Blade, Vaadin & Co 2
Zrebna Erste Steps mit Vaadin - via HotSwapAgent nach Code-Änderungen, Server-Restart vermeiden Frameworks - Spring, Play, Blade, Vaadin & Co 0
sascha-sphw Spring Boot Resource Server (OAuth2) @MockMvc Frameworks - Spring, Play, Blade, Vaadin & Co 5
LimDul JEE - MessageDrivenBean und mehrere Server Frameworks - Spring, Play, Blade, Vaadin & Co 7
L Rest Server über Jersey Low Code starten Frameworks - Spring, Play, Blade, Vaadin & Co 7
LesterBurnham Spring, Config Server, mehrere Gitlab Repos für Konfiguration - best practices Frameworks - Spring, Play, Blade, Vaadin & Co 1
D Spring Boot auf virtuellen Server oder Cloud? Frameworks - Spring, Play, Blade, Vaadin & Co 4
D AWS Server Spring Boot und Datenbank Frameworks - Spring, Play, Blade, Vaadin & Co 0
B Spring Boot/Html-Content/Web-Server Frameworks - Spring, Play, Blade, Vaadin & Co 2
A Spring Server Logging Frameworks - Spring, Play, Blade, Vaadin & Co 5
Jose05 Java Anwendung, über den Browser steuern Frameworks - Spring, Play, Blade, Vaadin & Co 1
S java springboot HTML Produktstruktur Frameworks - Spring, Play, Blade, Vaadin & Co 1
G Java springboot Item mit ItemInstance verbinden Frameworks - Spring, Play, Blade, Vaadin & Co 2
thor_norsk Javac nicht vorhanden in Java-17-openjdk-amd64 Frameworks - Spring, Play, Blade, Vaadin & Co 8
padde479 Cannot invoke "java.util.Map.containsKey(Object)" because "requestMap" is null Frameworks - Spring, Play, Blade, Vaadin & Co 2
OnDemand Vaadin Pro & TypScript vs Plain Java Frameworks - Spring, Play, Blade, Vaadin & Co 4
S Java Web App oder PHP Frameworks - Spring, Play, Blade, Vaadin & Co 10
Zrebna SpringBoot-Project: java.sql.SQLSyntaxErrorException: Access denied for user 'gap3'@'%' to database '3306/gap3' Frameworks - Spring, Play, Blade, Vaadin & Co 3
L Hilfe beim Erstellen einer Java Web Anwendung gesucht Frameworks - Spring, Play, Blade, Vaadin & Co 5
8u3631984 required a bean of type 'java.lang.String' that could not be found. Frameworks - Spring, Play, Blade, Vaadin & Co 8
M Java Spring Security Frameworks - Spring, Play, Blade, Vaadin & Co 5
OnDemand Webfrontend mit Java Backend Frameworks - Spring, Play, Blade, Vaadin & Co 26
L Controller Spring Boot mit Java Frameworks - Spring, Play, Blade, Vaadin & Co 20
J Spring Boot Thymleaf mit Java.Optional Frameworks - Spring, Play, Blade, Vaadin & Co 0
B Java Spring Boot - POM-Problem Frameworks - Spring, Play, Blade, Vaadin & Co 8
H OAuth2 mit Spring boot und Java Frameworks - Spring, Play, Blade, Vaadin & Co 5
P Java EE vs. Spring Frameworks - Spring, Play, Blade, Vaadin & Co 2
K Spring Security für Java SE Frameworks - Spring, Play, Blade, Vaadin & Co 2
V Java (Eclipse) programmierung zum Springerproblem Frameworks - Spring, Play, Blade, Vaadin & Co 1
M Java for-Schleife überspringt eine Eingabe Frameworks - Spring, Play, Blade, Vaadin & Co 11
Java.getSkill() Gemeinsam Java Spring lernen Frameworks - Spring, Play, Blade, Vaadin & Co 17
S Senior-Softwareentwickler (m/w) Java / Spring im Raum Frankfurt Frameworks - Spring, Play, Blade, Vaadin & Co 0
MQue Meine Java Spring Appl Frameworks - Spring, Play, Blade, Vaadin & Co 0
W Java Applet aus der Taskleiste springt in Vordergrund Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Java Applet:Thread.Timeout überspringt Teile des Codes Frameworks - Spring, Play, Blade, Vaadin & Co 2
S Integrations Test in Java mit Spring Frameworks - Spring, Play, Blade, Vaadin & Co 2
A Java Bean Validation und Spring Webflow Frameworks - Spring, Play, Blade, Vaadin & Co 0
Y java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener Frameworks - Spring, Play, Blade, Vaadin & Co 14
W java Spring mit db Frameworks - Spring, Play, Blade, Vaadin & Co 1
nrg Debugger springt immer in Java SE Code Frameworks - Spring, Play, Blade, Vaadin & Co 3
B Spring / Jpa / Hibernate -> java.lang.IllegalArgumentException: Unknown entity Frameworks - Spring, Play, Blade, Vaadin & Co 1
H java web anwendung auf spring 2.0 umstellen Frameworks - Spring, Play, Blade, Vaadin & Co 3
8u3631984 Ist es möglich in Spring Entity generische Listen verwenden Frameworks - Spring, Play, Blade, Vaadin & Co 3
R Spring Boot Test Assertions mit Objekten Frameworks - Spring, Play, Blade, Vaadin & Co 6
8u3631984 Pfad zu Test Datei in application.yml in Spring Boot Test Frameworks - Spring, Play, Blade, Vaadin & Co 7
R Spring Boot sql Beziehungen Frameworks - Spring, Play, Blade, Vaadin & Co 12
8u3631984 Spring JPA Probleme beim SPeichern von Sets Frameworks - Spring, Play, Blade, Vaadin & Co 3
M Spring Boot 3 Datenbanken zur Laufzeit Verbinden Frameworks - Spring, Play, Blade, Vaadin & Co 5
8u3631984 Spring JDBC Probleme beim Spaltennamen Frameworks - Spring, Play, Blade, Vaadin & Co 3
LimDul Spring-Batches in Docker über Rest starten/verfolgen Frameworks - Spring, Play, Blade, Vaadin & Co 0
ExceptionOfExpectation In Meiner Spring-Boot Applikation verlangt die Datenbank Wert für eine ID Frameworks - Spring, Play, Blade, Vaadin & Co 5
H Spring Boot Applikation und JHM Benchmark sowie ContextConfiguration in H2 Tests ich bekomme es nicht hin Frameworks - Spring, Play, Blade, Vaadin & Co 2
ExceptionOfExpectation Tests in Spring-Boot Frameworks - Spring, Play, Blade, Vaadin & Co 4
R Eure Erfahrungen mit Primefaces und Spring - wer managed die Beans Frameworks - Spring, Play, Blade, Vaadin & Co 4
Avalon Get Request doppelt abfeuern ohne Post Redirect Get Pattern. Spring Boot Thymeleaf MVC Frameworks - Spring, Play, Blade, Vaadin & Co 12
thor_norsk Konfigurationsprobleme mit Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 9
R Spring Boot Integration-testing mit Keycloak Frameworks - Spring, Play, Blade, Vaadin & Co 1
R Spring Boot Integration-testing mit Keycloak Frameworks - Spring, Play, Blade, Vaadin & Co 13
L Spring Data und Rest Controller? Frameworks - Spring, Play, Blade, Vaadin & Co 4
thor_norsk Spring Boot Fehler Frameworks - Spring, Play, Blade, Vaadin & Co 1
L Spring Data und Rest Conroller? Frameworks - Spring, Play, Blade, Vaadin & Co 4
thor_norsk Spring Boot und Docker Frameworks - Spring, Play, Blade, Vaadin & Co 5
B Spring Amazon-SP-Api Frameworks - Spring, Play, Blade, Vaadin & Co 3
8u3631984 Aktualisiere Spring Controller Frameworks - Spring, Play, Blade, Vaadin & Co 4
L Spring Data: Modellierung mit einer Embeddable bean Frameworks - Spring, Play, Blade, Vaadin & Co 2
D Spring Boot Test ob Validation geprüft wurde Frameworks - Spring, Play, Blade, Vaadin & Co 8
K Spring Boot OneToMany Frameworks - Spring, Play, Blade, Vaadin & Co 6
8u3631984 Spring Boot Docker Image erstellen und mit docker-compose konfigurieren Frameworks - Spring, Play, Blade, Vaadin & Co 1
M Wann Spring Batch nutzen? Frameworks - Spring, Play, Blade, Vaadin & Co 1
P Spring Hessian Remote Beispiel Frameworks - Spring, Play, Blade, Vaadin & Co 20
8u3631984 Spring 2.7.8 Info Enpoint nicht zuerreichen Frameworks - Spring, Play, Blade, Vaadin & Co 1
gradlew.bat spring-boot:run funktioniert nicht Frameworks - Spring, Play, Blade, Vaadin & Co 4
Zrebna Spring Boot/Thymeleaf: Bestätigungsemail senden. Frameworks - Spring, Play, Blade, Vaadin & Co 2
Zrebna Spring - Thymeleaf: Wieso wird gem. Fallunterscheidung entsprechende View nicht geladen? Frameworks - Spring, Play, Blade, Vaadin & Co 3
Dimax Spring UsernameNotFoundException(msg); auf der View msg ausdrücken Frameworks - Spring, Play, Blade, Vaadin & Co 1
Dimax Spring UsernameNotFoundException(Message) auf der View Message ausdrücken Frameworks - Spring, Play, Blade, Vaadin & Co 2
B Spring Boot und JPA Error creating bean Frameworks - Spring, Play, Blade, Vaadin & Co 24
R Spring Security: Wie kommt 'UserDetails' an Username und Passwort ran? Frameworks - Spring, Play, Blade, Vaadin & Co 6
R Spring Security: Wie den User dynamisch authentifizieren? Frameworks - Spring, Play, Blade, Vaadin & Co 8
R Spring Security: Authentication & Permissions Frameworks - Spring, Play, Blade, Vaadin & Co 4
R Spring Boot: Warum soll PasswordEncoder in einer neuen Methode definiert sein? Frameworks - Spring, Play, Blade, Vaadin & Co 1
8u3631984 Cross-Origin beim Abrufen von Spring Endpoint Frameworks - Spring, Play, Blade, Vaadin & Co 1
D Spring Boot und Microservices Frameworks - Spring, Play, Blade, Vaadin & Co 1
M Spring Boot additional Datasource for a single entity Frameworks - Spring, Play, Blade, Vaadin & Co 0
T Spring Resourcen Ordner ermitteln Frameworks - Spring, Play, Blade, Vaadin & Co 5
B Spring JPA und Repository Frameworks - Spring, Play, Blade, Vaadin & Co 12
D Mapstruct Dependency Injection funktioniert nicht mit Spring Frameworks - Spring, Play, Blade, Vaadin & Co 15
Avalon Wie sieht bei Euch das Deployment einer Spring Boot Anwendung aus? Frameworks - Spring, Play, Blade, Vaadin & Co 4
M Threads in Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 7
W DI-Problem in Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 4
T Spring Boot: Was bewirkt parent in maven genau? Frameworks - Spring, Play, Blade, Vaadin & Co 4
T Spring Security: Run-as replacement Einsatzbereich? Frameworks - Spring, Play, Blade, Vaadin & Co 1
OnDemand Vaadin+Spring Boot erster Seitenload nach Neustart endlos Frameworks - Spring, Play, Blade, Vaadin & Co 0
doncarlito87 Wie erhalte ich ein JSON aus eine NativeQuery (Spring Boot)? Frameworks - Spring, Play, Blade, Vaadin & Co 8
Avalon @Query Select Abfrage liefert falsche Werte (Spring Boot, JPA, Hibernate) Frameworks - Spring, Play, Blade, Vaadin & Co 3
Avalon Erstellung Dockerimage mit spring-boot:build-image in Spring Boot mit Umgebungsvariablen Frameworks - Spring, Play, Blade, Vaadin & Co 0

Ähnliche Java Themen

Neue Themen


Oben