首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Wicket上基于主机的动态挂载

Wicket上基于主机的动态挂载
EN

Stack Overflow用户
提问于 2011-07-06 22:35:06
回答 2查看 461关注 0票数 2

我对Wicket有一个不寻常的要求。我选择了Wicket,因为我会让我的网站以设计为中心,它的URL挂载功能对于SEO来说是最好的。不幸的是,我发现了一个肿块。

我想为不同的主机创建一个不同的设计网站。这个站点将有一些主机别名(比如:"abc.com","abc.com.br","abc.com.pl") --所有这些都指向相同的代码库(即相同的tomcat主机实例)。多亏了Tomcat和定制的ResourceStreamLocator,这个部分已经启动并运行了。

现在,我希望对不同的主机使用不同的挂载。这意味着"abc.com/page1“、"abc.com.br/pagina1”和"abc.com.pl/strona1“必须指向相同的"Page1.class”页面。来自"abc.com“的用户看不到"abc.com/pagina1”或"abc.com/strona1“。

如何执行这种“基于动态主机的挂载”?

请注意,我不是在谈论i18n。我使用这个例子是因为它很容易解释。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-06 23:15:10

您的解决方案不是为您提供了由同一代码库支持的多个webapp实例吗?如果是的话,我不认为你应该做什么。

我不知道是否有开箱即用的解决方案可以在单个what应用中做到这一点,但如果没有,我会这么做。

第一件事是,为了让它无缝工作,您需要单独的应用程序实例。

如何做到这一点?

扩展WicketFilter类(这是将servlet容器链接到Wicket的servlet过滤器)。该类有一个名为webApplication的字段,您必须将其替换为vhostname-application映射。(这也意味着复制doFilter()方法的全部代码,因此它不是一个非常整洁的解决方案。这更像是一个黑客行为。无论如何)

这样就可以了,每个vhost都有一个单独的应用程序实例。

但您的会话变量仍将在站点之间共享,这不是一个好主意。(在实践中,您的浏览器不会将一个vhost发出的cookie发送到另一个vhost,但是如果将会话id放在url中,您可以通过这种方式跨越vhost。)

为了避免会话混淆,您还必须更改getFilterConfig()方法,以便它为不同的应用程序实例返回不同的配置。(筛选器名称是用于为会话变量添加前缀的属性。)

我不是100%确定这是否有效,我还没有尝试过,但如果你不能找到一个更好的(更重要的是,更干净的)解决方案,这是你唯一的选择。

票数 2
EN

Stack Overflow用户

发布于 2011-07-07 01:52:39

在Wicket 1.5中,这一要求非常简单。您只需要设置自定义根请求映射器,它将在所有预定义(系统)请求映射器之前接收请求。这样,您可以检查请求url并返回相应的页面,或者如果该url与您的任何映射都不匹配,则让默认映射器处理该url。

请参见Application#setRootRequestMapper()和IRequestMapper接口。HttpsMapper和CryptoMapper是这样工作的。

另一种方法是#mount(IRequestMapper),并使用非常高的IRequestMapper#getCompatibilityScore)。Wicket使用此分数来决定将哪个映射器与缺省根映射器一起使用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6598155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档