java – JSF所需的URL重写解决方案
作者:互联网
假设以下应用程序格局:
+-----------------+
| App server |
+-----------------+
| | +-------+
| ear1 | | |
| +-web1 (/ctx1) +--<-- http://localhost/ctx1/xxx/ --+ +--<-- http://www.example.com/xxx/
| | | |
| | | proxy |
| ear2 | | |
| +-web2 (/ctx2) +--<-- http://localhost/ctx2/yyy/ --+ +--<-- http://abc.example.com/yyy/
| | | |
+-----------------+ +-------+
正如您所看到的,代理(在我的情况下是nginx)是将请求转发到单个应用程序服务器实例,而后者又有多个具有不同上下文路径的Web模块.当然我不希望我的公共服务器暴露内部上下文根和代理它的工作做得好,包装和解包http请求等.但仍然有一个大问题:JSF生成的HTML代码(链接,css,js资源,表单actions)在我的例子中包含上下文路径,/ ctx1和/ ctx2.这就是我想要避免的.
除了使用越来越多不同的应用服务器实例(域)之外,我现在没有解决方案,导致我的硬件资源逐渐消失.据我了解,我需要使用一些包装器来扩展我的JSF应用程序,这些包装器可能在faces-config.xml中注册,这将删除生成的html中的上下文前缀.还欢迎任何其他解决方案.
请指出我正确的方向.
解决方法:
你可以使用OCPsoft Rewrite URLRewriteFilter(目前不是PrettyFaces,但你可以同时使用它们,直到他们在PrettyFaces 4发布后正式加入 – Rewrite是PrettyFaces 4的核心项目)
使用单个配置规则,执行此类操作应该相当简单.如果这条规则过于严格或过于笼统,你显然可以摆弄.
.defineRule()
.when(URL.matches("{prefix}" + context.getContextPath() + "{suffix}")
.perform(Substitute.with("{prefix}{suffix}"))
看看重写网站.这很容易设置. http://ocpsoft.org/rewrite/
标签:java,jsf,web-applications,jsf-2,prettyfaces 来源: https://codeday.me/bug/20190928/1829301.html