Grails 编译的GSP页面是否绑定到上下文路径?

Grails 编译的GSP页面是否绑定到上下文路径?,grails,grails-2.0,gsp,Grails,Grails 2.0,Gsp,我正在开发一个Grails2.4.2应用程序,相同的代码库用于各种客户。每个客户都可以使用自己的图标、文本字符串等定制基于GSP的web UI。我已经确保使用Config.Groovy中定义的Groovy变量在GSP页面中完成定制。也就是说,类似这样的事情: customerName = '' favicon = '' if (appName == 'foo') { customerName = 'Foo' favicon = "favicon_${appName}.ico" } W

我正在开发一个Grails2.4.2应用程序,相同的代码库用于各种客户。每个客户都可以使用自己的图标、文本字符串等定制基于GSP的web UI。我已经确保使用Config.Groovy中定义的Groovy变量在GSP页面中完成定制。也就是说,类似这样的事情:

customerName = ''
favicon = ''

if (appName == 'foo') {
  customerName = 'Foo'
  favicon = "favicon_${appName}.ico"
}
WEB-INF/classes/gsp_foo_bar.class
WEB-INF/classes/gsp_foo_bar_gsp_html.data
WEB-INF/classes/gsp_foo_bar_gsp_linenumbers.data
这些变量随后在GSP页面中引用。这个很好用。问题在于,该应用程序需要为每个客户提供一个单独的war文件。因此,CI服务器为客户a构建war,然后运行grails clean,修改application.properties文件中的应用程序名称等,为客户B构建war等。每个war文件构建大约需要450万次,乘以10次客户构建。因此,我认为更好的方法是构建一次war文件,然后让CI服务器复制N次,并在每个war文件中使用客户名称、servlet上下文路径等修改application.properties文件。有人向我指出,GSP页面是在war文件构建期间编译的,它们最终以上下文路径作为类名的一部分而结束。我觉得这有点奇怪。例如,假设我有客户Foo,我决定构建一个名为Foo.war的war文件,该文件将部署在servlet上下文路径/Foo上。page bar.gsp的编译结果如下:

customerName = ''
favicon = ''

if (appName == 'foo') {
  customerName = 'Foo'
  favicon = "favicon_${appName}.ico"
}
WEB-INF/classes/gsp_foo_bar.class
WEB-INF/classes/gsp_foo_bar_gsp_html.data
WEB-INF/classes/gsp_foo_bar_gsp_linenumbers.data

我尝试为客户A获取已编译的war文件,更改应用程序名称和上下文,并将其重新部署为客户B。它工作正常,我看到客户B的图标等。因此,我猜问题的摘要归结为_foo u部分是否将页面与上下文路径/foo关联,或者如果这只是一个装饰性的东西?我当然不希望在运行时延迟编译或重新编译的性能受到影响。而且,因为在这种情况下,GSP页面的内容基本上是静态的,不会发生变化,因此它似乎不必与上下文或应用程序名称绑定。是否有人知道这只是一个命名问题,或者每当我更改应用程序名称/上下文时,如果我不重新编译war,是否会遇到问题?也许有更好的方法来实现我想要的?谢谢

如何使用外部配置并在布局/模板中动态设置favicon


我不太明白你的意思。favicon是通过GSP页面中的变量引用的,就像现在一样。我想也许我没有清楚地表达我的问题。问题是,我需要每个客户都有一个war文件,我希望避免为每个客户重建它。但是看到编译的GSP的类名中显示了上下文路径,我觉得它与上下文路径有某种联系。我的想法是有一个外部配置,并将所有这些特定于客户的信息存储在那里。然后运行应用程序,每个应用程序都有自己的配置。至于上下文,大多数web容器都允许您定义应用程序的上下文路径——请看,这正是我正在做的。是的,各种客户部署都有其独特的上下文路径。我想我应该重新措辞这个问题。我想知道的不是配置,而是为什么上下文路径成为已编译GSP页面类的一部分,以及编译后它是否实际绑定到上下文路径。也就是说,如果我在创建war文件后决定更改上下文路径,是否会导致GSP出现问题?我试图避免为每个客户重新创建war文件,包括编译所有Groovy代码和GSP页面。你真正的问题是什么?您可以在同一服务器中部署具有不同上下文路径名称的同一war,而不会出现任何问题。你试过了吗?谢谢阿尔贝托维奇。是的,我试过了,但不确定是否有缺点,比如应用程序不能使用编译过的页面或类似的东西。很高兴听到事实并非如此。