我有一个在Glassfish上运行的Java项目,它呈现了一些丑陋的HTML。这是使用各种内部和外部JSP库带来的副作用。我想设置一些渲染后的过滤器,它将通过HTMLTidy提供最终的超文本标记语言,这样源代码就会很好,整洁,有助于调试。这个是可能的吗?
在服务器将JSP呈现为HTML之后,是否有一种内置的机制来执行某些操作?该操作是否可以将生成的HTML作为字符串并对其进行操作?有没有一些简单的内置选项可以在不需要额外编码的情况下做到这一点?
发布于 2010-02-03 02:45:15
JTidyFilter
发布于 2010-02-03 04:15:06
通过将JSP2.1属性trimDirectiveWhitespaces设置为true,也可以在一定程度上消除此行为。这可以通过以下方式在单个JSP文件中启用:
<%@page trimDirectiveWhitespaces="true" %>或通过web.xml中的以下条目(需要将其声明为Servlet2.5!)对所有JSP文件执行以下操作:
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<trim-directive-whitespaces>true</trim-directive-whitespaces>
</jsp-property-group>
</jsp-config>在JSP2.1之前的容器中,或者在JSP2.1容器中,由于某些内部原因,实际上不支持这一点,比如Tomcat,您需要参考它的JspServlet文档来获取任何初始化参数。例如,在Tomcat中,您也可以通过在Tomcat的/conf/web.xml中将JspServlet的trimSpaces初始参数设置为true来配置它
<init-param>
<param-name>trimSpaces</param-name>
<param-value>true</param-value>
</init-param>应该注意的是,这两种方法并不真正“重新格式化”HTML代码。它实际上只修剪了标记库和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在这里更简单:)
发布于 2010-02-03 02:46:30
如果您可以更改控制流,以便在html输出返回到浏览器之前获得它,那么jtidy可能会对您有所帮助。
不过,我认为这是最坏的修复方案。从长远来看,更有帮助的应该是分离你的html生成代码并重构它。即使是在大型、复杂的项目中,您也应该能够以小块的方式完成此工作,并且您将获得逐步的改进。否则,如果你的问题发展到整洁无能为力的地步,你就会回到你开始的地方(还有更多笨拙的代码要处理)。
https://stackoverflow.com/questions/2186650
复制相似问题