Für den Abruf mehrerer Bilder rufe ich ein PhotoHelperServlet
mit einem Anchor-Tag auf, um imageNames (mehrere Bilder) wie folgt zu erhalten:
PhotoHelperServlet
, um Namen von Images
In ImageDAO listNames () -Methode:
%Vor%Im JSP-Code:
%Vor%In PhotoServlet doGet () -Methode, um ein Foto zu erhalten:
%Vor%In ImageDAO getPhotos () Methode
%Vor%In web.xml
%Vor%Frage:
Ich bekomme folgende Ausnahme:
%Vor%in dieser Zeile:
%Vor%Die vollständige Ausnahme:
%Vor%Ich würde mir vorstellen, dass der grundlegende Code-Ablauf wie folgt aufgebaut ist:
%Vor% Und dass das Schließen von ResultSet
das InputStream
implizit geschlossen hat. Es sieht so aus, dass Ihr JDBC-Treiber die InputStream
der ResultSet
nicht vollständig im Speicher oder auf dem temporären Speicher speichert, wenn% code_% geschlossen ist. Vielleicht ist der JDBC-Treiber ein wenig vereinfacht oder nicht gut durchdacht, oder das Bild ist zu groß, um im Speicher gespeichert zu werden. Wer weiß.
Ich würde zunächst herausfinden, welche JDBC-Treiber-Impl / Version Sie verwenden, und dann in der Entwicklerdokumentation nachsehen, welche Einstellungen dieses Verhalten möglicherweise ändern / beheben können. Wenn Sie es immer noch nicht herausfinden können, müssen Sie den grundlegenden Codeablauf wie folgt neu anordnen:
%Vor%Oder
%Vor% Der erste Ansatz ist der effizienteste, nur der Code ist ungeschickt. Der zweite Ansatz ist speicherineffektiv, wenn Sie in ResultSet
kopieren, oder die Leistung ist ineffizient, wenn Sie in ByteArrayOutputStream
kopieren. Wenn die Bilder meist klein sind und ein Megabyte oder etwas anderes nicht überschreiten, dann kopiere ich einfach nach FileOutputStream
.
Es sieht so aus, als ob das Problem tatsächlich nicht in dem von Ihnen geposteten Code liegt. Aus irgendeinem Grund ist der Stream input
geschlossen. Sie schließen den Stream wahrscheinlich in image.getPhoto()
Tags und Links java servlets jdbc ioexception