Liefert Daten vom Servlet zum Java Client zurück

8

Hallo, ich habe ein Problem mit der Rückgabe von Daten von Servlet zu Java Client. Dies ist ein erstes Mal, dass ich ein Servlet benutze. Alle Beispiele, die ich im Web sah, geben Daten an eine HTML-Seite zurück, aber ich möchte eine Server-Client-Software machen, bei der Server etwas tut und eine String-Liste zurückgibt.

Wie kann ich von einer GET / POST-Methode ein Array zu einem Client zurückbringen? Was setze ich in setContentType? Ich habe nicht verstanden, wie kann ich die Informationen, die ich will (wie int, Array, String) in Antwort setzen und zurück zum Client.

Wenn jemand ein Beispiel geben könnte, wo ein Java-Client eine POST-Anfrage macht und ein Servlet ihm eine Array- oder ArrayList zurücksendet, wäre ich sehr glücklich.

    
Strom 20.10.2011, 14:53
quelle

5 Antworten

7

Sie stoßen auf das Problem der Serialisierung . Bei der Serialisierung konvertieren Sie einige Daten in ein Format, das übertragen werden kann. Es gibt mehrere Möglichkeiten, dies zu tun, einige werden in anderen Antworten erwähnt.

Ich würde vorschlagen, JSON als Format zu verwenden. Sie können eine schöne JSON-Bibliothek für Java von json.org erhalten. Dann können Sie einfach ein JSON-Array mit der Bibliothek erstellen und es in den OutputStream des Servlets schreiben.

%Vor%

Nun können Sie von Ihrem Client aus die Anfrage machen und Ihre ArrayList wie folgt zurückbekommen:

%Vor%     
Jack Edmonds 20.10.2011, 15:22
quelle
1

Sie scheinen einen RESTful Service über http zu benötigen. Sie sollten auswählen, wie Sie Ihre Objekte serialisieren möchten. Die typische Wahl ist JSON - Sie serialisieren das Objekt zu JSON und schreiben es in die Antwort (mit Content-Type auf application/json

gesetzt)

Es gibt Frameworks, die das tun - werfen Sie einen Blick auf Spring MVC oder Jersey / Resteasy

Wenn Sie etwas Low-Level möchten, können Sie RMI oder Sockets direkt verwenden, ohne ein Servlet zu verwenden. Servlets zielen auf HTTP-Anfragen ab, die nur Textdaten übertragen können.

    
Bozho 20.10.2011 14:56
quelle
0

IMO Sie möchten Daten entweder als XML oder JSON zurückgeben; Dies erleichtert die Kundengenerierung erheblich. Ohne zu wissen, was Ihr Klient eigentlich ist, ist es jedoch schwierig, eine große Hilfe zu sein.

    
Dave Newton 20.10.2011 14:56
quelle
0

Das Senden nativer Objekte kann nicht ohne weiteres erreicht werden, aber JSON ist eine billige Alternative.

Verwenden Sie eine Bibliothek wie GSON zum Serialisieren / Deserialisieren von / zu JSON.

    
Sean Patrick Floyd 20.10.2011 15:00
quelle
0

Sie könnten den Antwort-Ausgabestream einfach in ein ObjectOutputStream umbrechen und Ihr Java-Objekt (das serialisierbar sein müsste) in das ObjectOutputStream schreiben. Umschließen Sie auf der Clientseite den Eingabedatenstrom in ObjectInputStream , verwenden Sie readObject , und geben Sie das Ergebnis in den erwarteten Objekttyp ein.

Dies macht das Servlet natürlich nur für Clients nutzbar, die in Java geschrieben sind und die dieselben Klassen wie der Server haben. Normalerweise sollte ein Dienst, der eine HTTP-Schnittstelle anbietet, von jeder Art von Client verwendet werden, und es wird ein offeneres Format wie XML oder JSON gewählt. Aber wenn Sie das brauchen, warum verwenden Sie nicht die native Serialisierung. Das macht Spring HttpInvoker, BTW.

    
JB Nizet 20.10.2011 15:29
quelle

Tags und Links