Problem mit RequestDispatcher einschließlich JSP programmatisch in Weblogic 12c

8

Ich habe Probleme mit der folgenden Situation:

In unserer aktuellen Webanwendung, die auf Tomcat 7.0.64 läuft, schaffen wir es, eine JSP-Seite über Java mit Hilfe einer eigenen Klasse CharArrayWriterResponse implementing HttpServletResponseWrapper einzubinden.

Der Grund dafür ist, dass wir das resultierende HTML in JSON verpacken, das für eine AJAX-Antwort benötigt wird.

Abhängigkeiten:

%Vor%

Codebeispiel:

%Vor%

Hinweis: Ich habe die Ausnahmebehandlung in obigen Codebeispielen nicht berücksichtigt.

Ich muss diese Anwendung auf WebLogic (12.2.1) migrieren, aber diese Lösung funktioniert nicht mehr.

Was ich bisher herausgefunden habe:

In Tomcat nach dem Aufruf von request.getRequestDispatcher(jsp).include() des obigen Beispiels getWriter() meiner CharArrayWriterResponse Klasse wird aufgerufen.

In WebLogic getWriter() wird nicht mehr aufgerufen und das ist der Grund, warum es nicht mehr funktioniert.

Nach einiger Fehlersuche habe ich herausgefunden, dass in WebLogic anstelle von getWriter() nur getOutputStream() aufgerufen wird, wenn ich sie überschreibe. getWriter() wird nicht einmal in Weblogic aufgerufen, daher müssen Unterschiede in der zugrunde liegenden Implementierung von Tomcat und WebLogic bestehen.

Problem ist, dass ich mit getOutputStream() keine Möglichkeit sehe, die Antwort des Aufrufs include() in einem separaten Stream oder etwas anderem zu erhalten und in String zu konvertieren, um den endgültigen JSON mit dem HTML zu erstellen.

Hat jemand dieses Problem bereits gelöst und kann eine funktionierende Lösung für die programmatische Einbindung einer JSP in Kombination mit WebLogic bereitstellen?

Weiß jemand eine andere Lösung, um mein Ziel zu erreichen?

Danke für Anregungen.

Lösung

Siehe Arbeitsbeispiel hier

Tipp

Ein Unterschied, den ich zwischen Tomcat und der neuen Weblogic-Lösung herausgefunden habe: Mit letzterem ist es nicht mehr möglich, JSPFs direkt mit Tomcat getWriter() zu integrieren.

Die Lösung umschließt die JSPF in einer JSP-Datei.

    
Michael 24.02.2017, 13:55
quelle

3 Antworten

2

Ich habe das getan:

%Vor%

Ich habe WriterOutputStream von apache commons-io verwendet, also musste ich in meine pom.xml aufnehmen:

%Vor%

Ich weiß nicht, was in Ihrer jsp-Datei ist, aber ich habe es mit einer einfachen getestet und ich glaube, es hat funktioniert. Meine JSP-Datei:

%Vor%

Ausgabe (beim Zugriff auf das Servlet in einem Browser):

%Vor%     
user7605325 28.02.2017, 13:29
quelle
2

Da ich nicht herausfinden kann, wie man mehrzeiligen Code in Kommentare schreibt, lege ich es einfach hier hin. Ich könnte das Problem beheben überschreiben flush() Methode in MyServletOutputStream Klasse:

%Vor%     
user7605325 02.03.2017 17:27
quelle
2

Hier ist mein aktuelles und funktionsfähiges Beispiel, wie man eine JSP-Datei programmatisch einfügt, wenn getOutputStream() anstelle von getWriter() aufgerufen wird, wenn HttpServletResponseWrapper :

implementiert wird %Vor%     
Michael 02.03.2017 13:11
quelle