Убрать пробелы из вывода JSP
Как я могу удалить лишние пробелы из вывода страниц JSP? Есть ли переключатель, который я могу включить в моем файле web.xml? Есть ли особые настройки для Tomcat?
10 ответов
Существует директива 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>
К сожалению, если у вас есть необходимое пространство, может потребоваться удалить его, поэтому в некоторых местах вам может понадобиться неразрывное пространство.
Если ваш сервлетконтейнер не поддерживает JSP 2.1 trimDirectiveWhitespaces
собственности, то вам нужно проконсультироваться с ее JspServlet
документация для любых параметров инициализации. Например, в Tomcat вы можете настроить его, установив trimSpaces
init-param для true
в течение JspServlet
в Tomcat's /conf/web.xml
:
<init-param>
<param-name>trimSpaces</param-name>
<param-value>true</param-value>
</init-param>
Совершенно другая альтернатива - JTidyFilter. Он не только удаляет пробелы, но и форматирует HTML с правильным отступом.
TrimDirectiveWhitespaces поддерживается только сервлет-контейнерами, поддерживающими JSP 2.1 и более поздние версии, или в случае с Tomcat, Tomcat 6 (и некоторые версии, например Tomcat 6.0.10, не реализуют его должным образом - не знают о других). Здесь есть больше информации о trimDirectiveWhitespaces:
http://www.oracle.com/technetwork/articles/javaee/jsp-21-136414.html
и здесь
Не совсем то, о чем вы просите, но что мне помогает, так это то, что метки 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>
Если вы используете теги, вы можете применить там тоже:
<%@ tag description="My Tag" trimDirectiveWhitespaces="true" %>
И на вашем JSP:
<%@ page trimDirectiveWhitespaces="true" %>
Вы можете сделать еще один шаг вперед, а также удалить символы новой строки (возврат каретки) между тегами 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>>\s*<</token>
<value>><</value>
<regexFlags>
<regexFlag>MULTILINE</regexFlag>
</regexFlags>
</configuration>
</execution>
</executions>
</plugin>
Это изменит только JSP в каталоге сборки и не затронет JSP в ваших источниках.
Возможно, вам придется адаптировать путь (<filesToInclude>
) где находятся ваши JSP.
Пожалуйста, используйте функцию обрезки, например
fn:trim(string1)
Add/edit your tomcat catalina.properties
файл с
org.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false
See also: https://confluence.sakaiproject.org/display/BOOT/Install+Tomcat+7
В web.xml добавьте этот сервлет, этот параметр обрезки
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>trimSpaces</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- The mappings for the JSP servlet -->
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.jspx</url-pattern>
</servlet-mapping>
Просто немного не в тему. Если вы хотите избавиться от пустых строк, вызванных тем, что вы делали перед выводом, вы можете использовать
out.clearBuffer();