I’ve often found that most JSP developers are uncertain as to why their HTML output contains a lot of extra blank-lines, tabs and carriage returns. White space included in the template text of JSP pages is preserved by default. This can have undesirable effects. For example, a carriage return added after a taglib directive would be added to the response output as an extra line. This cruft is known as WhiteSpace, and it is responsible for a lot of wasted bandwidth and many spacing issues in HTML designs.
The challenge:
- Developers that only use WYSIWYG editors are never even aware of the extra spacing within JSP source code.
- Developers that work in source code often want to format the markup to allow for better visualization and readability of the source code.
- Most IDE’s do not show the developers the special characters within the editor environment, external text editors such as NotePad++ and TextPad can be configured to show them.
Here’s a few suggested approaches on removing these, first development items:
- Remove comments:
- Remove any (and all) JSP style comments
<%-- comment --%>
as each line in them will result in a carriage return being sent to the browser. - While you are at it, remove HTML comments
<!-- comment -->
as they often expose potential attack vectors for individuals trying to hack your website.
- Remove any (and all) JSP style comments
- Combine your JSP directives,
<%@page %>
or<jsp:directive.page />
into a single entry. - Open and close all tags on a single line when possible.
Compiler options are possible for some platforms:
- The page directive on each JSP can contain the argument to tell the compiler to trim the space in individual JSP’s:
<jsp:directive.page language="java" pageEncoding="utf-8" trimDirectiveWhitespaces="true" />
- For Tomcat (and others?) web.xml can be edited to contain the following in the
jsp-config
section:
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<trim-directive-whitespaces>true</trim-directive-whitespaces>
</jsp-property-group>
</jsp-config>
- For Tomcat (and others?) web.xml can be edited to contain the following for the
JSPServlet
:
<init-param>
<param-name>trimSpaces</param-name>
<param-value>true</param-value>
</init-param>
- The deployment descriptor can also be used to do so by adding a
trim-directive-whitespaces
element to ajsp-property-group
element in the deployment descriptor and set it totrue
. - Some IDE’s expose the attribute, NetBeans 5.5 uses the following:
- Open the deployment descriptor file in the editor.
- Click the Pages button at the top of the editor.
- Select a JSP property group.
- Select the Trim Directive Whitespaces checkbox.
- Save the deployment descriptor.
- Custom tag authors can eliminate white space from the output generated by a tag file by setting the
trimDirectiveWhiteSpace
attribute of the tag directive totrue
.
JSP Version Matrix for common servers:
Apache Tomcat 7.0.x | JSP 2.2 |
Apache Tomcat 6.0.x | JSP 2.1 |
Apache Tomcat 5.5.x | JSP 2.0 |
Apache Tomcat 4.1.x | JSP 1.2 |
Apache Tomcat 3.3.x | JSP 1.1 |
IBM WebSphere Application Server 7.x | JSP 2.x |
IBM WebSphere Application Server 6.x | JSP 2.0 |
IBM WebSphere Application Server 5.x | JSP 1.2 |
REFERENCES:
- http://java.sun.com/developer/technicalArticles/J2EE/jsp_21/(JSP 2.1)
- http://stackoverflow.com/questions/208736/strip-whitespace-from-jsp-output
- http://java.sun.com/developer/technicalArticles/J2EE/jsp_21/
- http://raibledesigns.com/rd/entry/trim_spaces_in_your_jsp1
- http://www-01.ibm.com/support/docview.wss?uid=swg1PK94316
Happy coding!