我该如何从JSP页面的输出中去除额外的空格?我可以在web.xml中切换开关吗?是否有Tomcat特定的设置?
我该如何从JSP页面的输出中去除额外的空格?我可以在web.xml中切换开关吗?是否有Tomcat特定的设置?
有一个 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>
不幸的是,如果您有一个必须的空格,它可能也需要剥离,因此在某些位置可能需要使用不间断空格。
如果你的servlet容器不支持JSP 2.1的trimDirectiveWhitespaces
属性,那么你需要查阅它的JspServlet
文档以获取任何初始化参数。例如,在Tomcat中,你可以通过在Tomcat的/conf/web.xml
中为JspServlet
设置trimSpaces
init-param为true
来配置它:
<init-param>
<param-name>trimSpaces</param-name>
<param-value>true</param-value>
</init-param>
另一个完全不同的替代品是JTidyFilter。它不仅可以修整空格,还可以以正确的缩进格式化HTML。
trimDirectiveWhitespaces只被支持JSP 2.1及以上版本的Servlet容器所支持,或在Tomcat的情况下,Tomcat 6(有些版本如Tomcat 6.0.10不正确地实现它 - 不了解其他版本)。
关于trimDirectiveWhitespaces的更多信息,请参见此处:
http://www.oracle.com/technetwork/articles/javaee/jsp-21-136414.html
在这里
虽然不是你要求的直接答案,但我使用的方法是巧妙地在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>
<%@ tag description="My Tag" trimDirectiveWhitespaces="true" %>
在你的JSP页面上:
<%@ page trimDirectiveWhitespaces="true" %>
fn:trim(string1)
例如,将其更改为:
<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>
<filesToInclude>
),以确定JSP文件的位置。请添加/编辑您的Tomcat catalina.properties
文件:
org.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false
另请参阅:https://confluence.sakaiproject.org/display/BOOT/Install+Tomcat+7
稍微偏离实际问题,如果您想要消除输出前由之前操作引起的空行,您可以使用以下方法:
out.clearBuffer();
<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>
web.xml
: <init-param> <param-name>trimSpaces</param-name> <param-value>true</param-value> </init-param> - Ujjwal Singh