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.
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% 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
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.
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.
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.