我有一個運行在Glassfish上的Java項目,呈現了一些醜陋的HTML。它是使用各種內部和外部JSP庫的副作用。我想設置一些後渲染過濾器,通過HTMLTidy提供最終的HTML,以便源代碼很好,並且整齊有助於調試。這可能嗎?通過htmltidy提供呈現的jsp頁面
服務器將JSP呈現爲HTML後,是否有內置的機制來執行某些操作? 該操作可以將生成的HTML作爲字符串並對其進行操作嗎? 有沒有一些簡單的內置選項來做到這一點,沒有額外的編碼?
我有一個運行在Glassfish上的Java項目,呈現了一些醜陋的HTML。它是使用各種內部和外部JSP庫的副作用。我想設置一些後渲染過濾器,通過HTMLTidy提供最終的HTML,以便源代碼很好,並且整齊有助於調試。這可能嗎?通過htmltidy提供呈現的jsp頁面
服務器將JSP呈現爲HTML後,是否有內置的機制來執行某些操作? 該操作可以將生成的HTML作爲字符串並對其進行操作嗎? 有沒有一些簡單的內置選項來做到這一點,沒有額外的編碼?
如果你可以改變控制流,讓你得到HTML輸出之前它返回到瀏覽器,然後jtidy可以幫助你。
雖然我認爲這是最壞的情況。從長遠來看,應該幫助更多的是分離你的html生成代碼並重構它。即使在大型,複雜的項目中,您也應該能夠以小塊做到這一點,並逐漸獲得改進。否則,如果你的問題增加到整潔無法幫助的地步,你會回到你開始的地方(並且用更難處理的代碼來處理)。
通過將JSP 2.1屬性trimDirectiveWhitespaces
設置爲true
,也可以在一定程度上消除此行爲。
<%@page trimDirectiveWhitespaces="true" %>
或者對所有 JSP文件由web.xml
以下條目:這可以在單獨的JSP文件被啓用(這需要聲明的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>
在預-JSP 2.1容器,或者在JSP 2.1容器中,由於某些內部原因(如Tomcat)實際上不支持這種容器,因此您需要查閱它的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>
注意到應的是,這兩種方法並沒有真正的「格式化」的HTML代碼。它實際上只修剪taglibs和scriptlet留下的空白。另見this Sun article。因此,例如以下..
<ul>
<c:forEach items="${list}" var="item">
<li>${item}</li>
</c:forEach>
</ul>
..would基本上結束在
<ul>
<li>item1</li>
<li>item2</li>
<li>item3</li>
</ul>
因此,與雙縮進。實際上,你可以通過格式化代碼爲這樣的解決辦法這一點,JSP標籤是半縮進:
<ul>
<c:forEach items="${list}" var="item">
<li>${item}</li>
</c:forEach>
</ul>
但我認爲JTidyFilter更容易在這裏:)
非常酷。感謝你的回答!!! – Freiheit
我還想指出,沒有正式發佈,JTidyFilter仍然有點粗糙。你必須從JTidy nightlies下載:http://jtidy.sourceforge.net/nightly/ – Freiheit