Strip whitespace from jsp output

如何从 jsp 页面的输出中去掉额外的空格?有没有一个开关我可以打开我的 web.xml?有没有公猫的特殊设置?

93577 次浏览

有一个 trimeWhiteSpaces 指令可以完成这个操作,

在 JSP 中:

<%@ page trimDirectiveWhitespaces="true" %>

或者在 jsp-config 部分,您的 web.xml (注意,这是从 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>

不幸的是,如果你有一个需要的空间,它可能也需要剥离,所以你可能需要一个不换行空格在某些位置。

The trimDirectiveWhitespaces is only supported by servlet containers that support JSP 2.1 and after, or in the case or Tomcat, Tomcat 6 (and some versions e.g. Tomcat 6.0.10 don't implement it properly - don't know about the others). There's more information about trimDirectiveWhitespaces here:

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

还有这里

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

如果 servlet 容器不支持 JSP 2.1 trimDirectiveWhitespaces属性,那么需要查阅其 JspServlet文档以获得任何初始化参数。在例如 雄猫中,您也可以通过将 Tomcat 的 /conf/web.xml中的 JspServlettrimSpaces init-param 设置为 true来配置它:

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

另一个完全不同的选择是 JTidyFilter。它不仅减少了空格,而且以正确的缩进形式减少了 格式 HTML。

这并不是您直接要求的,但是帮助我的是以一种聪明的方式将 HTML 注释标记放在我的 jsp 标记周围,并且在 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>

添加/编辑 tomcat catalina.properties文件

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

参见: https://confluence.sakaiproject.org/display/BOOT/Install+Tomcat+7

您可以更进一步,还可以在构建时删除 html 标记之间的换行(回车)。

例如:

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

into:

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

Do do that, use the maven-replacer-plugin and set it up in 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。

您可能需要调整 JSP 所在的路径(<filesToInclude>)。

如果你使用标签,你也可以在那里应用:

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

And on your jsp:

<%@ page trimDirectiveWhitespaces="true" %>

请使用修剪函数,例如

fn:trim(string1)

Just a bit off the actual question, If you want to get rid of the empty lines cause by whatever you did before outputting, you can use

out.clearBuffer();