JSP生成的html里面会留下许多空白行(以及space, tab, etc.),那是动态语句留下的痕迹。当初留下这些空白行自然有他的理由 - 方便调试,这样行号才能对的上。但是对于处于production环境中的页面,这么多空白行有时候会是个灾难,常见原因有二: a. 大大增加了页面体积; b. 不利于SEO.
tomcat 5.x以后,在conf/web.xml中加入了一个参数来解决这个问题(我用的是Tomcat 6.0.10),那就是
<init-param>
<param-name>trimSpaces</param-name>
<param-value>true</param-value>
</init-param>
<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>
在web.xml里面给jsp servlet添加这个参数就OK。
我试了几次好象不行,还需要在页面上加两段代码:<%@ page trimDirectiveWhitespaces="true" %>和out.clear();
比如:
<%@ page language="java" pageEncoding="GB18030"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles"%>
<%@ page trimDirectiveWhitespaces="true"%>
<%
String filepath = "adminSet.do";//页面路径
request.setAttribute("filepath", filepath);
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
out.clear();
%>
JSP生成的html里面会留下许多空白行(以及space, tab, etc.),那是动态语句留下的痕迹。当初留下这些空白行自然有他的理由 - 方便调试,这样行号才能对的上。但是对于处于production环境中的页面,这么多空白行有时候会是个灾难,常见原因有二: a. 大大增加了页面体积; b. 不利于SEO.
众所周知,tomcat 5.x以后新加入了一个参数来解决这个问题,那就是
<init-param>
<param-name>trimSpaces</param-name>
<param-value>true</param-value>
</init-param>
在web.xml里面给jsp servlet添加这个参数就OK。
但是这样做有一个问题: 本来有用的space也会被trim掉。比如
<c:out value="${name}"/> <c:out value="${birth}"/>
之间的空格,在这个开关打开以后就没了,于是乎网页就显示成Jan2007-1-1,而不是Jan 2007-1-1,这样可不好。
更好的方案是,利用Ant的
replaceregexp task,把你不想要的东西替换掉,包括空行和空白。以下ant代码是我在工程中用到的,供参考:
<!-- strip blank lines before webpage -->
<replaceregexp match="/r/n" replace=""
flags="g" byline="false"
file="${war.dir}/site/common/setvar.jsp" />
<replaceregexp match="/r/n" replace=""
flags="g" byline="false">
<fileset dir="${war.dir}/site/layouts/" includes="**/*.jsp" />
</replaceregexp>
由于这个步骤只是在最后把发布的网页修改了,不会影响原文件的可读性。