我有一个在 Glassfish 上运行的 Java 项目,它呈现一些难看的 HTML。这是使用各种内部和外部 JSP 库的副作用。我想设置某种后渲染过滤器,它可以通过 HTMLTidy 提供最终的 HTML,以便源代码很好且整洁,以帮助调试。这可能吗?
在服务器将 JSP 呈现为 HTML 后,是否有内置机制来执行某些操作?该操作可以将生成的 HTML 作为字符串获取并对其进行操作吗?是否有一些简单的内置选项可以在没有额外编码的情况下做到这一点?
trimDirectiveWhitespaces
通过将 JSP 2.1 属性设置为,也可以在一定程度上消除这种行为true
。这可以通过以下方式在单个 JSP 文件中启用:
<%@page trimDirectiveWhitespaces="true" %>
或者在所有JSP 文件中通过以下条目web.xml
(需要声明 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 中设置trimSpaces
init-paramJspServlet
来配置它:true
/conf/web.xml
<init-param>
<param-name>trimSpaces</param-name>
<param-value>true</param-value>
</init-param>
应该注意的是,这两种方法并没有真正“重新格式化”HTML 代码。它实际上只修剪了 taglibs 和 scriptlet 留下的空白。另请参阅这篇 Sun 文章。所以例如以下..
<ul>
<c:forEach items="${list}" var="item">
<li>${item}</li>
</c:forEach>
</ul>
..基本上会在
<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 在这里更容易:)
如果您可以更改控制流,以便在将 html 输出返回到浏览器之前获得它,那么jtidy可能会帮助您。
不过,我认为这是最坏情况的解决方案。从长远来看,应该帮助更多的是分离您的 html 生成代码并对其进行重构。即使在大型、复杂的项目中,您也应该能够以小块的方式完成这项工作,并且您会逐渐得到改进。否则,如果你的问题发展到 tidy 无能为力的地步,你就会回到你开始的地方(并且需要处理更多笨拙的代码)。