117 votes

Suppression des espaces blancs dans la sortie jsp

Comment supprimer les espaces blancs supplémentaires de la sortie des pages jsp ? Y a-t-il un interrupteur que je peux actionner sur mon web.xml ? Existe-t-il un paramètre spécifique à Tomcat ?

181voto

Rontologist Points 2350

Il existe une directive trimWhiteSpaces qui devrait permettre d'y parvenir,

Dans votre JSP :

<%@ page trimDirectiveWhitespaces="true" %>

Ou dans la section jsp-config de votre web.xml (Notez que cela fonctionne à partir de la spécification servlet 2.5.) :

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

Malheureusement, si vous avez un espace obligatoire, il se peut que vous ayez également besoin d'un espace insécable, ce qui signifie que vous aurez peut-être besoin d'un espace insécable à certains endroits.

2 votes

Y a-t-il une différence en termes de performances entre ces deux options ?

0 votes

Le trimDirectiveWhitespaces n'est supporté que par les conteneurs de servlets qui supportent JSP 2.1 et suivants, ou dans le cas de Tomcat, Tomcat 6 (et certaines versions comme Tomcat 6.0.10 ne l'implémentent pas correctement - je ne sais pas pour les autres), il y a plus d'informations sur le trimDirectiveWhitespaces ici : java.sun.com/developer/technicalArticles/J2EE/jsp_21 et ici raibledesigns.com/rd/entry/trim_spaces_in_your_jsp1

3 votes

Et dans les fichiers .tag personnalisés JSP, utilisez <%@ tag body-content="scriptless" trimDirectiveWhitespaces="true" %>.

28voto

BalusC Points 498232

Si votre servletcontainer ne supporte pas la norme JSP 2.1 trimDirectiveWhitespaces vous devez alors consulter sa propriété JspServlet pour tout paramètre d'initialisation. Par exemple Tomcat vous pouvez également le configurer en définissant les paramètres suivants trimSpaces init-param à true pour JspServlet dans la section /conf/web.xml :

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

Une alternative complètement différente est le JTidyFilter . Non seulement il supprime les espaces blancs, mais il permet également de formats HTML dans une indentation correcte.

0 votes

J'ai configuré le paramètre trimSpaces init-param à true dans /conf/web.xml mais les espaces dans le html généré ne sont pas coupés. J'utilise Tomcat 6.0. Avez-vous une idée ?

7 votes

@ria : Notez que vous devez comprendre que cela ne supprime que les espaces blancs laissés par les taglibs comme JSTL et les scriptlets. Si vous voulez supprimer TOUS les espaces blancs du HTML, il faut trouver une autre solution. Vous pouvez trouver un exemple de filtre ici : balusc.blogspot.com/2007/12/whitespacefilter.html

0 votes

Je viens de remarquer quelques problèmes avec le code de l'article, car certaines choses sur mon site ont commencé à être mal affichées. J'ai copié la source html et l'ai collée dans le validateur w3 pour découvrir que le filtre d'espacement concatène parfois les attributs. Par exemple ceci... <div onclick="correct()" class="correct"> se transformerait en cette <div onclick="wrong "class="wrong">. Ou cette <a class="correct"> en cette <aclass="wrong">. Ainsi, en perdant l'espace blanc, la balise de fermeture de l'élément devient invalide. Des conseils à ce sujet ?

4voto

Simon B Points 137

Le trimDirectiveWhitespaces n'est supporté que par les conteneurs de servlets qui supportent JSP 2.1 et suivants, ou dans le cas de Tomcat, Tomcat 6 (et certaines versions comme Tomcat 6.0.10 ne l'implémentent pas correctement - je ne sais pas pour les autres). Il y a plus d'informations sur trimDirectiveWhitespaces ici :

http://www.oracle.com/technetwork/articles/javaee/jsp-21-136414.html

et ici

http://raibledesigns.com/rd/entry/trim_spaces_in_your_jsp1

4voto

redolent Points 1269

Ce n'est pas directement ce que vous demandez, mais ce qui m'aide, c'est de mettre des balises de commentaire HTML de manière intelligente autour de mes balises jsp, et aussi de mettre des espaces à l'intérieur d'une balise servlet (<% %>) :

${"<!--"}
<c:if test="${first}">
    <c:set var="extraClass" value="${extraClass} firstRadio"/>
</c:if>
<c:set var="first" value="${false}"/>
${"-->"}<%

%><input type="radio" id="input1" name="dayChooser" value="Tuesday"/><%
%><label for="input1" class="${extraClass}">Tuesday</label>

0voto

Ajoutez/éditez votre tomcat catalina.properties avec

org.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false

Voir aussi : https://confluence.sakaiproject.org/display/BOOT/Install+Tomcat+7

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X