从jsp输出中删除空格


Answers:


172

有一个trimWhiteSpaces指令可以完成此操作,

在您的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>

不幸的是,如果您有所需的空间,则可能还需要剥离该空间,因此在某些位置可能需要不间断的空间。


2
这两个选项之间在性能方面有区别吗?
jlb 2012年

trimDirectiveWhitespaces仅受支持JSP 2.1及更高版本的Servlet容器支持,或者在Tomcat,Tomcat 6和Tomcat 6(以及某些版本,例如Tomcat 6.0.10)未正确实现的情况下-不了解其他版本),有关trimDirectiveWhitespaces的更多信息,请参见: java.sun.com/developer/technicalArticles/J2EE/jsp_21 以及 raibledesigns.com/rd/entry/trim_spaces_in_your_jsp1
wavetree 2012年

3
在JSP自定义.tag文件中,使用<%@标签body-content =“ scriptless” trimDirectiveWhitespaces =“ true”%>。
Thomas W

Tomcat 7 web.xml:<init-param> <param-name> trimSpaces </ param-name> <param-value> true </ param-value> </ init-param>
Ujjwal Singh 2014年

我正在运行Tomcat 8,这似乎不起作用。对任何人有用吗?
glez

27

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

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

一个完全不同的替代方法是JTidyFilter。它不仅可以修剪空格,而且可以以正确的缩进格式设置 HTML 格式


我已经通过在/conf/web.xml中将trimSpaces init-param设置为true进行配置,但是生成的html中的空格没有被修剪。我正在使用Tomcat 6.0。有任何想法吗?
ria

7
@ria:请注意,这仅会修剪JSTL和scriptlet之类的标签库留下的空白。如果要修剪HTML中的所有空格,请使用其他解决方案。您可以在此处找到过滤器示例:balusc.blogspot.com/2007/12/whitespacefilter.html
BalusC

我刚刚注意到,有两点困扰我网站上的文章b / c,事情开始出现错误。我复制了html源并将其粘贴到w3验证器中,以发现空白过滤器有时会串联属性。例如,此... <div onclick =“ correct()” class =“ correct”>将变成此<div onclick =“ wrong” class =“ wrong”>。或将此<a class="correct">放入此<aclass =“ wrong”>。因此,通过丢失空白,元素的close标签将变得无效。有什么提示吗?
gmustudent


3

不直接是您的要求,但是对我有所帮助的是,以巧妙的方式将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>

3

如果您使用的是标签,也可以在此处应用:

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

在你的jsp上:

<%@ page trimDirectiveWhitespaces="true" %>

1

您可以更进一步,也可以在构建时删除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所在的路径()。




0

实际问题仅需一点点,如果您想摆脱由于输出前所做的操作而引起的空行,可以使用

out.clearBuffer();
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.