7 Stimmen

gerenderte jsp-Seiten durch htmltidy leiten

Ich habe ein Java-Projekt, das auf Glassfish läuft, das etwas hässlich aussehendes HTML rendert. Es ist ein Nebeneffekt der Verwendung verschiedener interner und externer JSP-Bibliotheken. Ich würde gerne eine Art Post-Rendering-Filter einrichten, der das endgültige HTML durch HTMLTidy leitet, so dass der Quellcode schön und ordentlich ist, um die Fehlersuche zu erleichtern. Ist dies möglich?

Gibt es einen eingebauten Mechanismus zur Durchführung einer Aktion, nachdem der Server die JSPs in HTML umgewandelt hat? Kann diese Aktion das generierte HTML als Zeichenkette abrufen und es manipulieren? Gibt es eine einfache eingebaute Option, um dies ohne zusätzlichen Code zu tun?

5voto

axtavt Punkte 233070

3voto

BalusC Punkte 1034465

Dieses Verhalten kann bis zu einem gewissen Grad auch durch die Einstellung der JSP 2.1-Eigenschaft trimDirectiveWhitespaces a true . Dies kann in einzelnen JSP-Dateien durch aktiviert werden:

<%@page trimDirectiveWhitespaces="true" %>

Oder auf todos JSP-Dateien durch den folgenden Eintrag in web.xml (das als Servlet 2.5 deklariert werden muss!):

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <trim-directive-whitespaces>true</trim-directive-whitespaces>
    </jsp-property-group>
</jsp-config>

In Containern vor JSP 2.1 oder in JSP 2.1 Containern, die dies aus internen Gründen nicht unterstützen, wie z.B. Tomcat, müssen Sie die JspServlet Dokumentation für alle Initialisierungsparameter. Zum Beispiel in Tomcat können Sie es ebenfalls konfigurieren, indem Sie die Option trimSpaces Init-Parameter von JspServlet a true in Tomcats /conf/web.xml :

<init-param>
    <param-name>trimSpaces</param-name>
    <param-value>true</param-value>
</init-param>

Zu beachten ist, dass bei beiden Ansätzen der HTML-Code nicht wirklich "umformatiert" wird. Es wird lediglich der Leerraum, der durch Taglibs und Scriptlets entsteht, abgeschnitten. Siehe auch dieser Artikel der Sun . So zum Beispiel die folgenden..

<ul>
    <c:forEach items="${list}" var="item">
        <li>${item}</li>
    </c:forEach>
</ul>

würde im Grunde genommen in

<ul>
        <li>item1</li>
        <li>item2</li>
        <li>item3</li>
</ul>

Also mit doppelter Einrückung. Sie können dies umgehen, indem Sie den Code so umformatieren, dass die JSP-Tags halb eingerückt sind:

<ul>
  <c:forEach items="${list}" var="item">
    <li>${item}</li>
  </c:forEach>
</ul>

Aber ich denke, der JTidyFilter ist hier einfacher :)

0voto

Dana the Sane Punkte 14222

Wenn Sie den Kontrollfluss so ändern können, dass Sie die HTML-Ausgabe erhalten, bevor sie an den Browser zurückgegeben wird, dann jtidy kann Ihnen helfen.

Ich würde dies jedoch als eine Lösung für den schlimmsten Fall betrachten. Langfristig sollte es eher helfen, den HTML-generierenden Code zu separieren und zu refaktorisieren. Selbst bei großen, komplexen Projekten sollten Sie in der Lage sein, dies in kleinen Stücken zu tun, und Sie werden eine allmähliche Verbesserung erzielen. Andernfalls, wenn die Probleme so groß werden, dass Tidy nicht mehr helfen kann, stehen Sie wieder da, wo Sie angefangen haben (und müssen mit noch unhandlicherem Code fertig werden).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X