从 jsp 输出中去除空格

问题描述 投票:0回答:10

如何从 jsp 页面的输出中去除多余的空格?我可以在我的 web.xml 上切换吗?有没有特定于 Tomcat 的设置?

jsp tomcat whitespace
10个回答
181
投票

有一个 trimWhiteSpaces 指令可以完成这个,

在你的 JSP 中:

<%@ page trimDirectiveWhitespaces="true" %>

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

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


28
投票

如果您的 servletcontainer 不支持 JSP 2.1

trimDirectiveWhitespaces
属性,那么您需要查阅其
JspServlet
文档以了解任何初始化参数。在例如Tomcat中,您也可以通过将
trimSpaces
init-param 设置为
true
in for
JspServlet
in for Tomcat的
/conf/web.xml
:

来配置它
<init-param>
    <param-name>trimSpaces</param-name>
    <param-value>true</param-value>
</init-param>

一个完全不同的选择是JTidyFilter。它不仅修剪空格,而且还 formats HTML 以正确的缩进。


4
投票

不直接是你要的,但对我有帮助的是在我的 jsp 标签周围以巧妙的方式放置 HTML 注释标签,并将空格放在 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>

4
投票

如果你正在使用标签,你也可以在那里申请:

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

在你的 jsp 上:

<%@ page trimDirectiveWhitespaces="true" %>

4
投票

trimDirectiveWhitespaces 仅受支持 JSP 2.1 及更高版本的 servlet 容器支持,或者在这种情况下或 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


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。

您可能需要调整 JSP 所在的路径 (

<filesToInclude>
)。


1
投票

请使用修剪功能,例如

fn:trim(string1)

0
投票

使用

 添加/编辑您的 tomcat 
catalina.properties

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

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


0
投票

只是有点偏离实际问题,如果你想摆脱输出前所做的任何事情引起的空行,你可以使用

out.clearBuffer();

0
投票

在 web.xml 中添加这个 servlet 这个修剪参数

<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>
© www.soinside.com 2019 - 2024. All rights reserved.