JSP輸出HTML時產生的大量空格和換行的去除方法_JSP編程

來源:互聯網
上載者:User
這個問題當年也困擾了我比較長的時間.因為在jsp內使用的EL標籤和其他標籤時,會產生大量的空格和分行符號.例如:
複製代碼 代碼如下:

------- start ----------
<c:choose>
<c:when test="${fn:length(mainPageList)>1&}">
Something
</c:when>
<c:otherwise>
Others
</c:otherwise>
</c:choose>
------- end -----------

這段代碼在Tomcat上輸出如下,多了幾行換行。
複製代碼 代碼如下:

------- start ----------
Something
------- end -----------

當然,一般不去特別留意是不會發現有什麼問題的,畢竟輸出再多的空格和分行符號,對於瀏覽器產生的最終效果是一樣的。也就是大部分開發人員忽略這個問題的原因;但實際上這些空格和換行會佔用了不少空間,我的經驗是30%左右是空格/換行。也有人說,當web伺服器以zip的方式來輸出html時,空格引起的頻寬問題就可以解決了;是的,當使用zip來輸出html時,空格/換行的空間會被節省回來,但這個增加zip的工作量,而且最大的問題是,瀏覽器產生頁面時,還是會還原所有的空格的分行符號。對於前端開發人員來說這是個噩耗,面對大量的空格和冗長的html源碼,想要找到對應出問題的樣式所在的位置可不是容易的事情。
下面說一下解決方案,以Tomcat為例:
方案一,利用web伺服器的trimSpaces功能。
Tomcat5 以上版本都可以使用,這是最簡單的方法。
複製代碼 代碼如下:

<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>trimSpaces </param-name>
<param-value>true </param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>

這個方案有個缺點,它會去掉所有jsp EL標籤之間的空格的分行符號,在部分情況下也來帶來不便。
如:Your name is ${firstName} ${lastName}. ==輸出為==> Your name is firstNamelastName.
兩個${}變數之間的空格也會消失。要解決這個問題是相當麻煩,要引入一個只有一個空格的變數。
<c:set var="one_space"> </c:set>
Your name is ${firstName}${one_space}${lastName}.
這樣就正常了,麻煩。雖然可以在一些全域變數的地方來增加一個one_space的變數,但代碼看上去還是不爽。
方案二,我比較喜歡。
這個方案只有在支援jsp 2.1的web伺服器上才可以使用,如Tomcat6。
Jsp2.1多了一個很有用的命令;
<%@ page trimDirectiveWhitespaces="true" %>
這個命令可以使jsp輸出的html時去除多餘的空行(jsp上使用EL和tag會產生大量的空格和空行),沒有使用trimSpaces的問題,現在jsp輸出html也可以很好地排版,看上去也專業;以前我一直都羨慕velocity的模板,輸出html十分乾淨好看,現在jsp也可以了。
另外提一下,Tomcat6有一些相容性問題,例如不能使用#{}這種代碼在jsp中,因為會被當成JSF指令碼執行。
雖然這是一個很小的問題,但我們還是要注意細節。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.