Wenn Sie die JSP-Ausgabe als Zeichenkette erfassen müssen, ist das relativ einfach (wenn auch vom Standpunkt des Designs aus alles andere als ideal) von innerhalb Servlet-Container:
1. Erweitern Sie javax.servlet.HttpServletResponseWrapper und überschreiben Sie die Methoden getWriter() / getOutputStream(), um Ihre eigenen gepufferten Versionen bereitzustellen (z. B. StringWriter)
2. Rufen Sie die Methode "include()" von RequestDisparcher auf und verpacken Sie die ursprüngliche Antwort in Ihre eigene.
3. Greifen Sie den Inhalt des Puffers.
Wenn Sie nun dasselbe tun müssen außerhalb Servlet-Container zu verwenden, müssen Sie sich wirklich fragen, "warum?". Vielleicht sollten Sie eine Template-Engine (FreeMarker / Velocity / StringTemplate / etc...) anstelle von JSPs verwenden? Wenn Ihre JSPs wohlgeformte XML-Dateien sind und keine Java-Code-Einschübe verwenden, kann es relativ trivial sein, sie in FreeMarker-Templates zu konvertieren (FreeMarker unterstützt benutzerdefinierte JSP-Tag-Bibliotheken). sehr Ihre Aufgabe zu vereinfachen.
Wenn es sich jedoch um eine absolut harte Anforderung handelt, sind die einfachsten Optionen:
1. Starten Sie einen externen Servlet-Container und überlassen Sie ihm die JSP-Interpretation. Ihr Programm würde HTTP-Anfragen an ihn senden und die Ausgabe erfassen.
2. Wie oben, aber Sie können eingebettete Servlet Container (z.B. Jetty) verwenden.
Wenn Ihre JSPs zur Build-Zeit verfügbar sind, können Sie sie über Jasper vorkompilieren, wie in anderen Antworten vorgeschlagen.
Ich würde stark Ich rate Ihnen davon ab, einen eigenen Servlet-Container zu implementieren - Sie werden sich in eine Welt des Schmerzes begeben.