迁移时处理上下文路径引用“ /”站点到Java EE包装
-
02-07-2019 - |
题
现有的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)做了更多相同的事情,他们称之为路由。
所以,没有解决它(除非你想使用智能正则表达式 - 已经尝试过,它运行得很好)。