Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过htmltidy馈送呈现的jsp页面_Java_Jsp_Glassfish_Htmltidy - Fatal编程技术网

Java 通过htmltidy馈送呈现的jsp页面

Java 通过htmltidy馈送呈现的jsp页面,java,jsp,glassfish,htmltidy,Java,Jsp,Glassfish,Htmltidy,我有一个在Glassfish上运行的Java项目,它可以呈现一些难看的HTML。这是使用各种内部和外部JSP库的副作用。我想设置某种呈现后过滤器,通过HTMLTidy提供最终的HTML,这样源代码就可以很好地帮助调试了。这可能吗 在服务器将JSP呈现为HTML后,是否有一种内置机制来执行某些操作? 该操作能否将生成的HTML作为字符串并对其进行操作? 是否有一些简单的内置选项可以在不进行额外编码的情况下执行此操作?如果您可以更改控制流,以便在html输出返回到浏览器之前获得它,则可能会对您有所帮

我有一个在Glassfish上运行的Java项目,它可以呈现一些难看的HTML。这是使用各种内部和外部JSP库的副作用。我想设置某种呈现后过滤器,通过HTMLTidy提供最终的HTML,这样源代码就可以很好地帮助调试了。这可能吗

在服务器将JSP呈现为HTML后,是否有一种内置机制来执行某些操作? 该操作能否将生成的HTML作为字符串并对其进行操作?
是否有一些简单的内置选项可以在不进行额外编码的情况下执行此操作?

如果您可以更改控制流,以便在html输出返回到浏览器之前获得它,则可能会对您有所帮助


但我认为这是最坏的解决方案。从长远来看,更有用的是分离html生成代码并对其进行重构。即使是在大型、复杂的项目中,您也应该能够以小规模完成这项工作,并且您将得到逐步的改进。否则,如果您的问题发展到tidy帮不上忙的地步,您将回到您开始的地方(并且需要处理更麻烦的代码)。

通过将JSP 2.1属性
trimDirectiveWhitespaces
设置为
true
,也可以在一定程度上消除这种行为。这可以通过以下方式在单个JSP文件中启用:


或者通过
web.xml
(需要声明为Servlet 2.5!)中的以下条目在所有JSP文件上:


*.jsp
真的
在jsp2.1之前的容器中,或者在jsp2.1容器中,由于某些内部原因,例如Tomcat,实际上不支持此功能,您需要查阅其
JspServlet
文档以获取任何初始化参数。例如,您也可以通过在Tomcat的
/conf/web.xml
中将
JspServlet
trimSpaces
init参数设置为
true
来配置它:


修剪空间
真的
应该注意的是,这两种方法并没有真正“重新格式化”HTML代码。它实际上只修剪taglib和scriptlet留下的空白。另见。因此,举个例子:

  • ${item}
…基本上会以

  • 项目1
  • 项目2
  • 项目3
这样就有了双重压痕。实际上,您可以通过将代码重新格式化,使JSP标记半缩进来解决此问题:

  • ${item}

但是我认为JTidyFilter在这里更容易:)

我还想指出,JTidyFilter在没有正式发布的情况下仍然有点粗糙。您必须从JTidy夜总会下载,网址为: