Wie kann ich eine Datei mit JSP bereitstellen?

8

Das hört sich vielleicht total dumm an, ist aber ein Fall des wirklichen Lebens :(

Ich kann eine HTML-Tabelle mit einem "virtuellen" Linknamen anzeigen.

In etwa so:

%Vor%

Diese Dokument-ID repräsentiert eine ID in der Datenbank (für diese Dokumente werden in einem Blob als Byte [])

gespeichert

Wie auch immer. Ich kann diese ID bekommen, die Datenbank abfragen und das Byte [] abrufen (und es sogar in einer tmp-Datei speichern)

Was ich nicht herausfinden kann ist, dass, wenn der Benutzer auf den Link klickt (und nachdem ich den DB-Abruf durchgeführt habe) das Byte [] an den Benutzer "liefert".

Nun der schlimmste Teil, und was mich dazu bringt, diese Frage hier zu stellen, ist, dass ich dies nur mit JSP (ohne Servlet) und ohne Bibliotheken von Drittanbietern machen soll (frag mich einfach nicht, warum ich es hasse auch)

Also. Wie decke ich in einem jsp den binären Inhalt eines Byte-Arrays, das im Server-Dateisystem gespeichert ist

Mein erster Gast ist:

%Vor%

Bin ich nah an der Lösung?

Würde das für den Client so funktionieren, als hätte er wirklich auf den Server geklickt, um eine echte Datei zu erstellen?

Vielen Dank im Voraus.

    
OscarRyz 22.01.2010, 02:03
quelle

4 Antworten

5

Schreiben Sie einfach den gleichen Code in JSP wie in einer Servlet-Klasse . Sie können es praktisch kopieren. Stellen Sie nur sicher, dass Sie nicht einen Schablonentext in den Stream schreiben, der Zeilenumbrüche und Leerzeichen außerhalb der Scriptlets enthält. Sonst würde es auch in die Binärdatei geschrieben und korrumpiert werden.

Wenn Sie mehrere Scriptlet-Blöcke haben, müssen Sie sie so arrangieren, dass zwischen der Endung %> eines Scriptlet und dem Start <% des nächsten Scriptlet kein Zeilenumbruch stattfindet. So zum Beispiel

%Vor%

statt

%Vor%     
BalusC 22.01.2010, 02:29
quelle
2

Sie müssen den MIME-Typ in der HTTP-Antwort wie unten neben dem von Ihnen bereitgestellten Beispielcode festlegen.

%Vor%

Beachten Sie, dass der MIME-Typ application / octet-stream verwendet wird, um eine Binärdatei anzugeben.

    
Taylor Leese 22.01.2010 02:16
quelle
2

Bitte, bitte, bitte tu das nicht.

Sie machen Ihren Benutzern einen schlechten Dienst.

HTTP ist erstaunlich reich in Bezug auf was es mit Dateien machen kann. Caching, Chunking, Direktzugriff usw.

Sehen Sie sich etwas wie FileServlet an und hämmern Sie es passend ein. Ja, es ist ein Servlet und keine JSP, aber das ist es, was Sie tun wollen, um ein guter HTTP-Bürger zu sein.

Einige Container haben andere Optionen, die Sie verwenden können, Sie können Tomcats DefaultServlet usw. hacken.

    
Will Hartung 22.01.2010 05:24
quelle
1

So etwas ...

%Vor%

Sie benötigen dies als Antwort auf den Klick (entweder beim Neuladen einer Seite oder in einer anderen jsp-Datei).

Es gibt bessere Pufferlösungen, die Sie mit dem Schreiben unter Verwendung von Byte-Arrays anstelle von einem nach dem anderen machen können ... Ich überlasse das für Sie.

Entschuldigung, dass Sie in JSP Scriptlet land stecken bleiben ... Hoffe, das hilft.

    
cjstehno 22.01.2010 02:16
quelle

Tags und Links