从java服务器页面删除所有HTML

时间:2013-09-12 14:30:09

标签: java html jsp parsing abstract-syntax-tree

任何人都知道从JavaServer Page中删除所有HTML的方法。仅保留Java代码和所有JSP属性。

我搜索但却找不到任何办法。我知道这种方法的唯一方法就是为jsp创建一个解析器,然后分析AST以保持重要的节点,但这个解决方案很痛苦。

如果有人知道如何以简单的方式做到这一点,请告诉我,否则,如果您知道解析器是唯一可行的方式,我也会感激。

编辑:

我需要这个来计算每个JSP中包含Java代码或JSP属性的行数。

1 个答案:

答案 0 :(得分:2)

你不能轻易做到这一点,因为HTML和JSP都是丰富的结构,无论是原子(lexemes)还是更复杂的结构(表,语句......)一个完整的解析器可以识别所有这些结构做的伎俩。如果你能得到这样的解析器,那么这是一个简单的方法。

但是如果你只想要HTML和JSP的物理行数,那么你只需要这个任务所需的解析器部分。特别是,您不需要所有构造识别机制;只是识别原子的部分,例如,只是解析引擎的词法部分。

您可以通过为每种类型的语法(例如HTML和JSP)定义词法分析器,以便在遇到它们之间的过渡时将控制权传递给另一个。这是一个非常标准的任务模数汗水公平。行计数非常简单;每个被识别的lexeme记录其起始和结束行,并提供必要的原始数据。

为HTML和JSP构建词法分析器在技术上并不难,但它可能需要做很多工作(“痛苦”就是你如何使用它)。特别是HTML多年来变得相当复杂,现在JSP可能包含大部分Java7作为子集。

如果您可以获得这样的解析器,对于物理行计数,实际上您应该只能提取词法分析器部分。但是改变解析器可能更容易。

如果您决定要测量JSP页面的更复杂属性(例如,嵌套HTML构造的深度,逻辑语句计数,代码耦合,您将无法选择;您'我真的需要解析器,因为这些测量是基于语言结构的复杂结构而不仅仅是lexemes。

可能有开源JSP解析器。当然,执行JSP的Web服务器必须包含这样的解析器;看看Tomcat的胆量。您必须从Web服务器中提取解析器,这可能是一些工作。我知道有商业JSP解析器旨在支持这种任务(我的公司有一个)。

如果您只是想要计数,并且您不想要这项工作,那么您可以获得一个已经内置此度量标准集合的工具。查看我公司的源代码搜索引擎(SCSE)产品,该产品生成SLOC, McCabe and Cyclometric measures on files作为其代码索引步骤的副产品。 SCSE使用我们必须的JSP解析器来实现这种效果,开箱即用。