Das hat mit der JSP selbst nichts zu tun, sondern mit der Implementierung der Methode "forward()".
forward() kenne ich nicht! Wo zu finden?
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?
Wieso alles? Es gibt ein Bean rights, das eine Hashtable mit allen Rechten (r,w,ext-w) führt. Im JSP selber wird nur noch geprüft, ob einmal das Bean noch in der Session ist, ob der Benutzer auf die Objekte, die er anfordert (über verschiedenen Paramter im Query-String), r-Zugriff hat, und ob das Objekt überhaupt existiert.
Dann wird aus der Datenbank der Dateiname und der MimeTyp geholt und mit dem geposteten Code-Stück an den Browser gesandt. Schon ist das Ding fertig, und verschlingt nicht mehr als 65 Zeilen. (Da würde ein Servlet evtl sogar mehr Zeilen verschlingen, jedenfalls solange das JSP im Rohzustand bleibt und nicht von Tomcat in ein richtiges Servlet verwandelt wird).
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.
Ok, vielleicht nagt diese doppelte Initialisierung des Output-Streams an der Performance, aber nicht so stark, dass es ein Mensch wirklich merken würde (ohne die Systemzeit zu stoppen).
Aber ich glaube zu verstehen was du eben mit 'JSP = Trennung zwischen Backend-Funktionalitäten und HTML-Präsentation' meinst. In der Hinsicht ist das natürlich Humbug. Mal sehen ob ich später noch die Gelegenheit habe, dass ganze in eine Servlet umzuwandeln (ist ja nicht viel Arbeit, aber die Zeit ist knapp).
Mit freundlichen Grüßen
Christian Heindl