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

想要将其迁移到Java EE包装,其中该站点需要在上下文根目录下运行,例如" /目录/目录/页"变成“/ my-context-root / dir / dir / page”

现在,使用ServletRequest.getContextPath()可以很容易地使用context-root,但这仍然意味着需要进行大量代码更改才能迁移大型代码库。大多数这些引用都是文字HTML。

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

有没有更好的方法来解决这个问题?有什么明显我想念的吗?所有评论都赞赏!

有帮助吗?

解决方案

查看相关的问题

另请考虑 URLRewriteFilter

另一件事(我一直在编辑这篇文章)。如果你正在使用JSP(与静态HTML或其他东西),你也可以创建一个标记文件来用链接(特别是一个img,form)替换常见的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有点棘手,但你明白了。

其他提示

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

Servlet世界开始使用过滤器

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

所以,没有解决它(除非你想使用智能正则表达式 - 已经尝试过,它运行得很好)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top