Удаление пробелов из вывода jsp

Как удалить лишние пробелы из вывода страниц jsp? Есть ли переключатель, который я могу щелкнуть в моем web.xml? Есть ли специфическая настройка Tomcat?


person Seth Weiner    schedule 16.10.2008    source источник


Ответы (9)


Это должно выполняться с помощью директивы trimWhiteSpaces,

В вашем JSP:

<%@ page trimDirectiveWhitespaces="true" %>

Или в разделе jsp-config ваш web.xml (обратите внимание, что это работает, начиная со спецификации сервлета 2.5.):

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

К сожалению, если у вас есть необходимое пространство, может потребоваться его удаление, поэтому в некоторых местах вам может потребоваться неразрывное пространство.

person Rontologist    schedule 16.10.2008
comment
Есть ли разница в производительности между этими двумя вариантами? - person jlb; 10.04.2012
comment
TrimDirectiveWhitespaces поддерживается только контейнерами сервлетов, которые поддерживают JSP 2.1 и более поздние версии, или, в случае Tomcat, Tomcat 6 (и некоторые версии, например Tomcat 6.0.10, не реализуют его должным образом - не знаю о других), есть дополнительную информацию о trimDirectiveWhitespaces можно здесь: java.sun.com/developer/technicalArticles/J2EE/jsp_21 и здесь raibledesigns.com/rd/entry/trim_spaces_in_your_jsp1 - person wavetree; 20.08.2012
comment
А в пользовательских файлах .tag JSP используйте ‹% @ tag body-content = scriptless trimDirectiveWhitespaces = true%›. - person Thomas W; 03.04.2013
comment
Tomcat 7 web.xml: ‹init-param› ‹param-name› trimSpaces ‹/param-name› ‹param-value› true ‹/param-value› ‹/init-param› - person Ujjwal Singh; 23.07.2014
comment
Я использую Tomcat 8, и это, похоже, не работает. У кого-нибудь работает? - person glez; 13.10.2016
comment
У меня возникла та же проблема при использовании тега JSP c: out для отображения значения java bean-компонента с использованием плиток. В нем были начальные и конечные пробелы. Это решение работало правильно, использование такой директивы страницы устранило проблему! - person rinilnath; 29.06.2017

Если ваш контейнер сервлетов не поддерживает свойство trimDirectiveWhitespaces JSP 2.1, вам необходимо обратиться к его JspServlet документации, чтобы узнать о любых параметрах инициализации. Например, в Tomcat вы также можете настроить его, установив trimSpaces init-param в true для JspServlet в Tomcat /conf/web.xml:

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

Совершенно другой альтернативой является JTidyFilter. Он не только удаляет пробелы, но и форматирует HTML с правильным отступом.

person BalusC    schedule 10.04.2010
comment
Я настроил, установив параметр init-param trimSpaces в значение true в /conf/web.xml, но пробелы в сгенерированном html не обрезаются. Я использую Tomcat 6.0. Любые идеи? - person ria; 19.04.2010
comment
@ria: Обратите внимание, что вы должны понимать, что при этом удаляются только пробелы, оставленные библиотеками тегов, такими как JSTL и скриптлеты. Если вы хотите удалить ВСЕ пробелы из HTML, обратитесь к другому решению. Вы можете найти пример фильтра здесь: balusc.blogspot.com/2007/12/whitespacefilter. html - person BalusC; 19.04.2010
comment
Я только что заметил пару ошибок с кодом из статьи b / c вещи на моем сайте начали отображаться неправильно. Я скопировал исходный код html и вставил его в валидатор w3, чтобы узнать, что фильтр пробелов иногда объединяет атрибуты. Например, этот ... ‹div onclick = right () class = corrective› превратится в этот ‹div onclick = invalidclass = неправильный›. Или этот ‹a class=correct› в этот ‹aclass = неправильный›. Таким образом, при потере пробела закрывающий тег для элемента становится недействительным. Есть какие-нибудь советы по этому поводу? - person gmustudent; 31.03.2013

Если вы используете теги, вы также можете применить их:

<%@ tag description="My Tag" trimDirectiveWhitespaces="true" %>

И на вашем jsp:

<%@ page trimDirectiveWhitespaces="true" %>
person Andres    schedule 22.02.2017

TrimDirectiveWhitespaces поддерживается только контейнерами сервлетов, которые поддерживают JSP 2.1 и более поздние версии, или, в случае Tomcat, Tomcat 6 (и некоторые версии, например, Tomcat 6.0.10, не реализуют его должным образом - не знаю о других). Больше информации о trimDirectiveWhitespaces можно найти здесь:

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

и тут

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

person Simon B    schedule 10.04.2010

Не совсем то, о чем вы просите, но что мне помогает, так это умное размещение тегов комментариев HTML вокруг моих тегов jsp, а также размещение пробелов внутри тега сервлета (‹%%>):

${"<!--"}
<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>
person redolent    schedule 01.10.2011

Вы можете пойти еще дальше и также удалить символы новой строки (возврат каретки) между тегами html во время сборки.

Например. изменять:

<p>Hello</p>
<p>How are you?</p>

в:

<p>Hello</p><p>How are you?</p>

Сделайте это, используйте maven-replacer-plugin и настройте его в pom.xml:

<plugin>
    <groupId>com.google.code.maven-replacer-plugin</groupId>
    <artifactId>replacer</artifactId>
    <version>1.5.3</version>
    <executions>
        <execution>
            <id>stripNewlines</id>
            <phase>prepare-package</phase>
            <goals>
                <goal>replace</goal>
            </goals>
            <configuration>
                <basedir>${project.build.directory}</basedir>
                <filesToInclude>projectname/WEB-INF/jsp/**/*.jsp</filesToInclude>
                <token>&gt;\s*&lt;</token>
                <value>&gt;&lt;</value>
                <regexFlags>
                    <regexFlag>MULTILINE</regexFlag>
                </regexFlags>
            </configuration>
        </execution>
    </executions>
</plugin>

Это изменит только JSP в каталоге сборки, но не затронет JSP в ваших источниках.

Возможно, вам потребуется изменить путь (<filesToInclude>), в котором расположены ваши JSP.

person yglodt    schedule 04.01.2017

Пожалуйста, используйте функцию обрезки, например

fn:trim(string1)
person Jorge Santos Neill    schedule 29.06.2019

Добавьте / отредактируйте файл tomcat catalina.properties с помощью

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

См. Также: https://confluence.sakaiproject.org/display/BOOT/Install+Tomcat+7

person Rajkumar Rajadurai    schedule 28.12.2012

Просто немного не в тему. Если вы хотите избавиться от пустых строк, вызванных тем, что вы делали перед выводом, вы можете использовать

out.clearBuffer();
person Ghostff    schedule 05.03.2020