There is a trimWhiteSpaces directive that should accomplish this,
In your JSP:
<%@ page trimDirectiveWhitespaces="true" %>
Or in the jsp-config section your web.xml (Note that this works starting from servlet specification 2.5.):
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<trim-directive-whitespaces>true</trim-directive-whitespaces>
</jsp-property-group>
</jsp-config>
Unfortunately if you have a required space it might also need strip that, so you may need a non-breaking space in some locations.
If your servletcontainer doesn't support the JSP 2.1 trimDirectiveWhitespaces
property, then you need to consult its JspServlet
documentation for any initialization parameters. In for example Tomcat, you can configure it as well by setting trimSpaces
init-param to true
in for JspServlet
in Tomcat's /conf/web.xml
:
<init-param>
<param-name>trimSpaces</param-name>
<param-value>true</param-value>
</init-param>
A completely different alternative is the JTidyFilter. It not only trims whitespace, but it also formats HTML in a correct indentation.
If you're using tags, you can apply there too:
<%@ tag description="My Tag" trimDirectiveWhitespaces="true" %>
And on your jsp:
<%@ page trimDirectiveWhitespaces="true" %>
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
and here
http://raibledesigns.com/rd/entry/trim_spaces_in_your_jsp1
Not directly what you're asking for, but what helps me is putting HTML comment tags in a clever way around my jsp tags, and also putting whitespace inside a servlet tag (<% %>):
${"<!--"}
<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>
You can go one step further and also remove newlines (carriage returns) between the html tags at build time.
E.g. change:
<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>>\s*<</token>
<value>><</value>
<regexFlags>
<regexFlag>MULTILINE</regexFlag>
</regexFlags>
</configuration>
</execution>
</executions>
</plugin>
This will only modify the JSPs in the build-directory, and not touch the JSPs in your sources.
You might need to adapt the path (<filesToInclude>
) where your JSPs are located in.
Please, use the trim funcion, example
fn:trim(string1)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With