6 Stimmen

Web Datenstreaming in Java EE

Wir haben ein Design wie dieses :

geben Sie hier eine Bildbeschreibung ein

Unser installierter Dienst auf Tomcat hat eine Methode getDatabaseData(String request) (RMI Client), die Daten aus der Datenbank unter Verwendung der (RMI Server-Implementierung) empfängt, die im Kern vorhanden ist.

wir möchten etwas tun, dass unser installierter Dienst, der sich in Tomcat befindet, jetzt eine XML-Datei erstellt und sie an den Client sendet :

wir haben über eine Lösung nachgedacht, die :

  • zuerst die gesamte XML-Datei auf unserem Tomcat mit dem getDatabaseData(String request) erstellt & dann kann unser Benutzer einen Verweis darauf erhalten, indem er einen Link dazu erhält & mit dem Herunterladen der Daten beginnen kann.

aber diese Lösung ist nicht informativ für uns, weil die Größe dieser Datei so groß ist und wenn wir das tun möchten, wird der Speicherplatz unseres Tomcat-Servers so schnell voll und ausgelastet, dass wir nach einer Lösung suchen, um Daten in Echtzeit an den Benutzer zu übertragen, anstatt die gesamte Datei zu erstellen. I meine eine Möglichkeit, die Daten an den Benutzer in einer XML-Vorlage zu senden, wenn die Daten vom KERN empfangen werden.

Haben Sie eine Idee ?

(übrigens wurde der Webservice auf Tomcat mit Spring MVC & Spring Security geschrieben)

1voto

Mikhail Punkte 4127

Ich kann Ihnen ein Stück Code aus meinem aktuellen Projekt geben, in dem wir eine Datei in einer Struts-Action zurückgeben:

response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\"");
ServletOutputStream out = response.getOutputStream();
out.write(file);

Ist das, wonach Sie suchen?

0voto

Mehdi Punkte 3615

Unter Verwendung des Codes von @Noofiz habe ich diesen Code zum Testen dieser Funktionalität geschrieben und das hat für mich funktioniert!

Wir können aus einer Datei lesen und sie rechtzeitig an den Benutzer senden, damit dieser die Datei herunterladen kann!

1) Ich habe 'Ende!' ausgegeben, um sicherzustellen, dass die Datei rechtzeitig an den Benutzer gesendet wird, wenn sie zwischengespeichert wird, und nicht zuerst das Zwischenspeichern beendet ist und dann an den Benutzer gesendet wird!

2) Die heruntergeladene Datei und die Hauptdatei wurden auf MD5 überprüft und waren ähnlich.

Hier ist mein Servlet-Code:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    InputStream is = new FileInputStream("/home/Mehdi/Desktop/log.log");
    response.setContentType("application/octet-stream");
    ServletOutputStream out = response.getOutputStream();
    int i;
    byte[] buffer = new byte[10 * 1024];

    while ((i = is.read(buffer)) != -1) {
        if (i != 10240) {
            for (int j = 0; j < i; j++) {
                out.write(buffer[j]);
            }
        } else {
            out.write(buffer);
        }
    }
    System.out.println("Ende!");
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X