Leerzeichen und leere Zeilen automatisch aus Tomcat-JSPs entfernen

Bei der Erstellung von JSPs entstehen im generierten HTML oft viele sinnlose Leerzeichen und leere Zeilen. Ab Tomcat 5.5 kann man diesen überflüssigen Whitespace automatisch per Konfiguration heraus filtern.

Dazu kann, wie in folgendem Code-Ausschnitt gezeigt, in der $CATALINA_HOME/conf/web.xml dem „jsp“-Servlet der init-param „trimSpaces“, hinzugefügt werden.

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

Das Resultat ist kompakteres HTML. Etwas Vorsicht ist allerdings geboten, da sich durch das Trimmen der Leerzeichen, vor allem in älteren Browsern, auch das Erscheinungsbild der Seite ändern kann.

Doppeltes Formular-Absenden in Spring-MVC verhindern

Jeder, der Web-Anwendungen erstellt oder betreibt, kennt es. Wenn ein Web-Formular nach 2 Sekunden noch nicht verarbeitet ist, klickt der Benutzer gerne ein weiteres mal auf den „Senden“-Button und erzeugt so einen weiteren Request. Da HTTP asynchron und verbindungslos ist, ist es gar nicht so einfach eine solche doppelte Formularversendung zu erkennen.

Session synchronisieren und Session-Form aktivieren

Im Spring-MVC lassen sich Formular-Requests bezüglich der Session synchronisieren. Dazu setzen wir das Controller-Attribut „synchronizeOnSession“ auf true. Es wird so verhindert, dass ein Formular nebenläufig verarbeitet wird.

setSynchronizeOnSession(true);

Ausserdem wird ein weiteres Controller-Attribut, und zwar „sessionForm“ auf true gesetzt, was Spring MVC dazu veranlasst, die Formulardaten in der Session zu speichern und, falls ein Formular doppelt abgesendet wurde, die Methode „handleInvalidSubmit(HttpServletRequest request, HttpServletResponse response)“ aufzurufen.

setSessionForm(true);

Falls jetzt ein Formular doppelt versendet wird, oder falls ein Benutzer ein Formular mit dem „zurück“-Button erneut anzeigen und absenden möchte, wird also nun „handleInvalidSubmit“ aufgerufen. Diese Methode lässt sich in unserem Controller überschreiben, um so zu bestimmen, wie sich der Controller im Falle einer doppelten Datensendung verhalten soll.

@Override
protected ModelAndView handleInvalidSubmit(HttpServletRequest request, HttpServletResponse response) throws Exception
{
    return new ModelAndView(getSuccessView()); // einfach weiter, da das Formular ja schon abgeschickt wurde
} 

Es muss übrigens nicht immer richtig sein, doppelte Formularversendungen zu verbieten. Wenn wir beispielsweise ein Suchformular erstellen, kann es sinnvoll sein, dem Nutzer zu erlauben, mit der Browser-Navigation zurück zum Formular zu gehen und eine Suche erneut abzuschicken.

Siehe hierzu auch: Doppeltes Formular-Absenden mit jQuery verhindern