1

现有的 Java 站点被设计为在 tomcat 上的“/”下运行,并且有许多对固定绝对路径的特定引用,例如“/dir/dir/page”。

想要将此迁移到 Java EE 打包,站点需要在上下文根下运行,例如“/dir/dir/page”变为“/my-context-root/dir/dir/page”

现在,使用 ServletRequest.getContextPath() 可以轻松地获取上下文根,但这仍然意味着要迁移大量代码库需要进行大量代码更改。这些引用中的大多数都是文字 HTML。

我已经尝试使用 servlet 过滤器对出站 HTML 进行重写,这似乎工作正常。但它确实引入了一些开销,我不认为它是一个永久的解决方案。 (有关 servlet 过滤器方法,请参阅EnforceContextRootFilter-1.0-src.zip )。

有没有更好的方法来解决这个问题?有什么明显的我失踪了吗?所有评论表示赞赏!

4

2 回答 2

1

查看相关问题

还要考虑URLRewriteFilter

另一件事(我一直在编辑这个该死的帖子)。如果您使用 JSP(相对于静态 HTML 或其他内容),您还可以创建一个标记文件来用链接(特别是 a、img、表单)替换常见的 html 标记。所以 <a href="/root/path">link</a> 可以变成 <t:a href="/root/path">link</t:a>。然后标签可以为你做翻译。

使用 sed 之类的东西可以轻松地“整体”完成这种更改。

sed -e 's/<a/<t:a/g' -e 's/<\/a>/<\/t:a>/g' old/x.jsp > new/x.jsp

表单操作可能比 sed 有点棘手,但你明白了。

于 2008-09-27T06:41:44.327 回答
0

apache 世界使用 Redirects(mod_rewrite) 来做同样的事情。

Servlet 世界开始使用过滤器

ruby 世界(或 RoR)做了更多相同的事情,他们称之为路由。

所以,没有办法绕过它(除非你想彻底使用智能正则表达式——它已经过尝试并且效果很好)。

于 2008-09-27T06:17:41.513 回答