Grails 3,动态更改contextPath(servletContext?)

时间:2016-03-04 10:01:06

标签: servlets grails grails-3.0 contextpath

我在动态更改grails 3 Web应用程序的contextPath时遇到问题。如果我在groovy.gsp(server.contextPath =" / myApp")中更改它,它会工作,但我需要使用不同的名称来部署它:

myApp_A.war => IP:端口/ myApp_A myApp_B.war => IP:端口/ myApp_B

In可以获取direcory名称(llike:" myApp_A" for myApp_A.war)并动态读取正确的属性文件(myApp_A.properties)。之后,我尝试动态地将此实例的上下文路径设置为IP:Port / myApp_A

我试图更改grails" server.contextPath"在引导程序中像这样: Holders.config' server.contextPath' =' / myApp_A' 但这并不完全有效。在这种情况下,我将被重定向到IP:Port / myApp_A,但后来我得到了404.Web服务仍在监听静态配置(" / myApp")。

我想我必须提前更改它(在bootstrap中为时已晚),或者直接在servletContext中更改它。更改Holders.config。' server.contextPath'对于新路径,servletContext仍然包含旧的静态路径(servletContext.getContextPath()= old path)。

在: class Application extends GrailsAutoConfiguration实现EnvironmentAware {... 我可以在创建servletContext之前读取我的设置并注入它们。我有什么想法可以在那里设置contextPath吗?

此致 grailsfan

2 个答案:

答案 0 :(得分:0)

在application.groovy中,编写逻辑以设置上下文路径。

您可以设置server.contextPath =“path_a”。

所以

if ( myCondition == true ) {
    server.contextPath = "path_a"
} else {
    server.contextPath = "path_b"
}

答案 1 :(得分:0)

在application.yml中添加到每个环境。然后,当您为每个环境构建WAR时,您的上下文也会更改。

grails.serverURL: 'http://localhost:8080/myapp'
server:
  port: 8080
  contextPath: '/myapp'