Martin Jung: Tomcat: getOutputStream() has already been called

Beitrag lesen

Hi,

Und das will ich eigentlich mit dem JSP verhindern: Ich möchte nicht alle Daten öffentlich zugänglich machen in dem ich das Verzeichniss, in dem die Bilddateien lagern, in den Servlet-Context stelle.

Das hat mit der JSP selbst nichts zu tun, sondern mit der Implementierung der Methode "forward()".

In der JSP werden nämlich auch noch Zugriffsrechte (die nur mit der Datenbank zu prüfen sind) geprüft.

Warum implementierst Du das alles in einer JSP?
Die JSP/Servlet-Technologie wurde eingeführt, um die *HTML*-Präsentation von der Content-Generation und allen anderen Backend-Funktionalitäten zu trennen (weswegen die aus den JSP genererierten Servlets auch standardmäßig den Content-Type des HTTP-Responses auf "text/html" setzen).

Ich habe aber intwischen eine Lösung gefunden:
bevor ich byteStream.writeTo(response.getOutputStream()); (o.s.a.) aufrufe rufe ich jetzt vorher nochmal out.clear(); auf. Damit funktionierts dann auch.

Eine technisch funktionierende Lösung zwar, aber keine sehr sinnvolle, denn Du setzt einen für einen anderen Zweck gedachten, bereits initialisierten HTTP-Response komplett zurück, um ihn dann neu zu erzeugen.

Was steht in der JSP eigentlich vor dem zitierten Code-Fragment?

Viele Grüße,
Martin