Erstellen Sie eine einzelne Zwei-Wege-Verbindung zwischen dem Client und dem Server, was bedeutet, dass der Client nur eine Anforderung an den Server senden muss, und der Server wird nach der Verarbeitung verarbeitet. Wenn Sie auf diese Zeit warten, um weiter zu arbeiten, ist der gesamte Prozess asynchron. In dieser Reihe von Tutorials werden Benutzer zur Verwendung der neuen Parsing JSON-API (JSR-353) in Java EE 7 in Container Glassfish 4 geführt und verwenden Jquery und Bootstrap in Kombination. In diesem Artikel müssen die Leser ein bestimmtes grundlegendes Grundsatz von HTML 5 WebSocket haben.
Renderings
Schauen wir uns zunächst die Renderings an, nachdem Sie dieses Tutorial abgeschlossen haben, wie unten gezeigt:
Vorbereitung
Wir verwenden JDK 7 und Mavn 3, um die Bibliothek zu erstellen.
<properties> <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir> <project.build.sourceEncoding>UTF-8</project.build.so urceEncoding> </properties> <dependencies> <De vorhöhe> <gruppe> javax </GroupId> <artifactId> javaee-api </artifactId> <version> 7.0 </Version> <Scope> bereitgestellt </scope> </abhängig> </de Pendenzen> <build> </ Plugins> <PLUGIN> <GruppeId> org.apache.maven.plugins </Groupid> <artifactId> Maven-Compiler-Plugin </artifactid> <version> 3.1 </Version> <Configuration> <Sou RCE> 1.7 </Quelle > <Target> 1.7 </target> <CompilerArgumente> <teuforsedDirs> $ {teufored.dir} </teuforsedDirs> </CompilerArgumente> </configuration> </plugin> <plugin> <gruppe> org.apache.maven.plugins </GroupId> <artifactId> maven-war-plugin </artifactId> <version> 2.3 </Version> <Configuration> <FailonmisswebxMl> false </failonmisswebxml> </configurati auf org.apache.
Gleichzeitig müssen die folgenden Plug-Ins hinzugefügt werden, um Glassfish 4 zu verwenden:
Plugin> <gruppe> org.glassfish.embedded </Groupid> <artifactid> maven-mitembedingte Brieselfisch-Plugin </artifactId> <version> 4.0 </Version> <Konfi-Guration> <torprefix> eingebettete Glasfisch </toteprefix> <App> $ {basiert}/target/$ {project.artifactid}-$ {project.version} .war </app> <autodelete> true </autodelete> <port> 8080 </port> <name> $ {$ { project .ArtifactId} </name> <contextroot> hascode </condextroot> </configuration> <cecutions> <execution> <gross> <giels </ plugin>
Einrichten des Endpunkts des WebSocket
Schauen wir uns zunächst den Code des Server -Websocket wie folgt an und führen Sie dann weitere Analysen durch:
Paket com.hascode.tutorial; WebSocket .onopen; decoders = chatMessageDecoder.class) öffentliche Klasse Chatendpoint {private landes logger logger = logger.getLogger (getClass (). getName ()); {Log. String Room = (String) Session.getUserProperties (). Get ("Room"); ) .GET ("Raum")) {S.GEBASICREMOTE (). }}
Die folgenden Analysen des obigen Codes:
Verwenden Sie @ServerendPoint, um einen neuen Endpunkt zu definieren, wobei der Wert die URL angibt und den Parameter patharams verwenden kann, so wie er in JAX-RS verwendet wird.
Daher ermöglicht der Wert "/chat/{rom}" dem Benutzer, über die folgende URL eine Verbindung zu einem Chatraum herzustellen: WS: //0.0.0: 8080/Hascode/Chat/Java
Der Wert in Zahnspangen (d. H. Raum) kann als Parameter in der Lebenszyklus -Rückrufmethode des Endpunkts unter Verwendung von javax.websocket.server.PathParam injiziert werden.
Darüber hinaus möchten wir eine codierte und dekodierte Klasse verwenden, da wir eine DTO -Klasse verwenden, mit der Daten auf dem Server und der Client -Seite übertragen werden.
Wenn der Benutzer zum ersten Mal eine Verbindung zum Server herstellt und die Raumnummer eingibt, um den Chatraum einzugeben, wird die Raumnummer in die Einreichung in Form von Parametern eingefügt, und der Wert wird in der Eigenschaftskarte des Benutzers mithilfe von Sitzung gespeichert. GetUserProperties.
Wenn ein Chat -Teilnehmer über die TCP -Verbindung Informationen an den Server sendet, schaltet er sich durch alle offenen Sitzungen durch, jede Sitzung ist an den angegebenen Chatraum gebunden und empfängt codierte und dekodierte Informationen.
Wenn wir einfache Textinformationen oder Informationen in Binärformat senden möchten, können wir Session.getBasicremote (). SendBinary () oder Session.getBasicremote () verwenden. SendText ()
Schauen wir uns anschließend den Code an, der zur Darstellung der Informationsübertragungsentität (DTO: Datenübertragungsobjekt) verwendet wird, wie folgt:
Paket com.hascode.tutorial;
Konvertierung von Chat -Nachrichten
In dieser Anwendung wird eine Codierungs- und Dekodierungsklasse zum Konvertieren zwischen Chat -Informationen und JSON -Format geschrieben.
Schauen wir uns zunächst die Implementierung der Dekodierungsklasse an, mit der die an den Server übergebenen Chat -Informationen in die ChatMessage -Entitätsklasse übergeben werden. Hier wird die Java -API für die JSON -Verarbeitung (JSR353) verwendet, um JSON -Formatinformationen in Entitätsklassen umzuwandeln.
Paket com.hascode.tutorial; Javax.Websocket.endpointconfig; löscht DecodeException {ChatMessage ChatMessage = New ChatMessage (); GetString ("Absender");
Schauen wir uns den Code der Codierungsklasse an.
Paket com.hascode.tutorial; void init (endgültige EndpointConfig -Konfiguration) {} @Override public void destroy () {} @Override public String Encodes (endgültiger ChatMessage ChatMessage) löst Enco Deexception {return json.createObjectBuilder () .Add ("Nachricht", Chatmessage.GetMessage () () (). ).
Hier sehen Sie die mächtige Kraft von JSR-353.
Bauen Sie einen einfachen Kunden über Bootstrap und Javacsript auf
Schließlich verwenden wir umfassend den berühmten Bootstrap, JQuery Framework und JavaScript, um einen einfachen Kunden zu entwerfen. Wir erstellen eine neue Index.html -Datei im Verzeichnis SRC/Main/WEAPP, und der Code ist wie folgt:
<! DocType html> <html Lang = "en"> <Head> [..] <Script> var wsocket; var $ message; ); // native API var $ messageline = $ ('<tr> <td>' + msg.recebed + '</td> <td>' + msg.sender + '</td> <td>' + msg .Message + '</td> </tr>'); "," Absender ":" ' + $ spickname.val () +' "," empfangen ":" "} '; Wsocket.Send (msg); $ message.val (' '). ConnectToServer () {Room = $ ('#Chatroom -Option: Ausgewählt'). Val (); $ chatWindow.Empty (); function () {$ spitzname = $ ('#spitzname'); ; $ spitzname.focus (); + $ spitzname.val () + "@" + raum); }); ) ::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::3 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::: Formular> <h2> Chat -Anzeichen in </H2> <Label für = "Spitzname"> Spitzname </label> <Eingabe type = "text" placeholder = "Spitzname" id = "Spitzname"> <div> <label for = "Chatroom"> Chatroom </ label> <select size = "1" id = "chatroom"> <option> Arduino </ ::::::::::::::::::::::::::3 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::: option> <option> java </option> <option> groovy </option> <option> scala </option> </select> </div> <button type = "subieren" id = "Ein Innenräume "> In </button> </form> </div> <!-/container-> <div> <form id =" do-chat "> <h2> </h2> <table id =" Antwort "> </ table> <fieldset> <Legend> Geben Sie Ihre Nachricht ein. </ legend> <div> <Eingabe typ : 60px "/> <Eingabe type =" Senden "value =" meldung senden "/> <button type =" schaltet "id =" /Form> </div> </body> </html>
Achten Sie im obigen Code bitte auf die folgenden Punkte:
Wenn Sie WebSocket auf der JavaScript -Seite anrufen möchten, müssen Sie die Verbindung auf folgende Weise initiieren: WS: // ip: port/context_path/endpoint_url z.
Die Methode zum Erstellen einer WebSocket -Verbindung ist sehr einfach und verwendet var wsocket = new WebSocket ('WS: //0.0.0.0: 8080/Hascode/Chat/Java');
Um die vom Server zurückgegebenen Informationen abzurufen, müssen Sie nur die entsprechende Methode festlegen, um die Rückgabeinformationen in der Rückruffunktion wsocket.onMessage zu erhalten.
Senden Sie eine WebSocket -Nachricht mit wsocket.send () an den Server, wobei die gesendeten Nachrichten Text- oder Binärdaten sein können.
Um die Verbindung zu schließen, wird wsocket.close () verwendet.
Schließlich stellen wir den Code über ein MVN-Paket ein.
Das obige Chatraum ist mit Javaee7, Websockets und Glassfish4 implementiert.