将" /"站点迁移到Java EE打包时处理上下文路径引用

时间:2020-03-06 14:49:06  来源:igfitidea点击:

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

希望将其迁移到Java EE封装,该站点将需要在上下文根目录下运行,例如" / dir / dir / page"变为" / my-context-root / dir / dir / page"

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

我已经尝试过使用servlet过滤器对oubound HTML进行重写,这似乎很好用。但这确实会带来一些开销,并且我不会将其视为永久解决方案。 (有关Servlet筛选器方法,请参阅EnforceContextRootFilter-1.0-src.zip)。

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

解决方案

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

Servlet世界开始使用过滤器

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

因此,它无处可逃(除非我们想使用透彻的智能正则表达式-已经尝试过并且可以正常工作)。

查看相关问题

还考虑URLRewriteFilter

另一件事(我一直在编辑这篇文章)。如果我们使用的是JSP(相对于静态HTML或者其他),则还可以创建一个标记文件,用链接(尤其是a,img,form)替换常见的html标记。因此,<a href="/root/path">链接</a>可以成为<t:a href =" / root / path">链接</ t:a>。然后标签可以为我们翻译。

可以使用sed之类的方法轻松地"批量"完成此更改。

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

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