【发布时间】:2012-10-24 10:37:51
【问题描述】:
问题:
我有一个生成报告的 servlet,更具体地说是报告的表体。它是一个黑盒子,我们无权访问源代码。
尽管如此,它的工作令人满意,并且不打算很快重写或替换 servlet。
我们需要修改它的响应文本以更新它生成的一些链接到其他报告,我正在考虑使用过滤器来查找锚文本并使用正则表达式替换它。
研究:
我遇到了this question,它有一个正则表达式过滤器。这应该是我需要的,但也许不是。
我并没有尝试解析严格意义上的parsing 术语的 HTML,并且我没有使用该语言的完整规范。我所拥有的是组成表格主体的 HTML 标记子集,并且没有嵌套表格,因此 servlet 生成的 HTML 子集不是递归的。
我只需要找到/替换锚点目标并向标签添加一个属性。
所以问题是:
我需要修改 servlet 的输出以更改所有此类链接:
<a href="http://mypage.com/servlets/reports/?a=report&id=MyReport&filters=abcdefg">
进入如下链接:
<a href="http://myOtherPage.com/webReports/report.xhtml?id=MyReport&filters=abcdefg" target="_parent">
我应该使用@ Jeremy Stein编写的正则表达式过滤器还是有更好的解决方案?
【问题讨论】:
-
我当然不会使用正则表达式来解析 HTML,但也许这样的东西适用于 URL 本身。对于幽默和可怕的警告,您应该阅读以下内容:stackoverflow.com/a/1732454/650425
-
@maple_shaft 在这个问题上我的团队在我的肩膀上发出了很多笑声。至于 servlet 输出,我们进行了测试,它编写了有效的 XML。如果我需要将其转换为数据结构,我会使用 XML 解析器对其进行解析。我只需要在响应中发送它之前修改它的部分。
-
当您说:“此类链接...” 是指指向特定主机或域的所有链接吗?或者只是那些具有特定 URL 的人?或者只有那些 path=
servlets/reports/您需要更明确地说明您希望修改哪些锚链接。另外,锚还有其他属性吗? -
谢谢 ridge,我还是进入了正则表达式路径。我没有解析 HTML,只是在输出上进行查找替换。跑得快,能胜任。
-
对到达这里的人的警告:避免使用懒点。*?如果可以的话,就像瘟疫一样。regular-expressions.info/catastrophic.html
标签: java regex httpresponse servlet-filters