Grails聪明地获得战争基础?

时间:2011-03-15 20:07:47

标签: java tomcat grails groovy war

我的baseUrl是http://localhost:8080/whatever。在其他机器上,它是http://localhost/whatever

是否有一种聪明的方法可以在不使用

的情况下获取此信息
<%
    String baseUrl = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath()
%>

我正在尝试动态创建一些指向路径参数化的rest URLS的链接,即:

http://localhost:8080/a/b/${param1}/c/${param2}

如果有更好的方法,请告诉我。

4 个答案:

答案 0 :(得分:7)

如果你忘了,问题here中没有回答。只需在已部署计算机的配置文件中设置grails.serverURLgrails.app.context即可。然后使用createLink制作网址。或者我错过了什么?

答案 1 :(得分:6)

此解决方案不需要设置grails.serverURL:

<g:createLink absolute='true' uri='/WHATEVER'/>

${g.createLink(absolute:true, uri:"/WHATEVER")}

将生成:

http://HOST:PORT/APPNAME/WHATEVER

URI设置为指向应用中的目标位置。使用'/'作为应用的基本网址:

http://HOST:PORT/APPNAME/

答案 2 :(得分:0)

<g:link>标记接受一个参数“absolute = true”,它将构建一个尊重当前环境的serverUrl和contextPath的URL。我建议将其与named URL mapping结合使用以构建您的网址。

如果您无法在页面呈现时构建整个网址,Grails仍然可以为您构建部分网址:

var url = '${g.createLink(absolute: true, mapping: "mymappingname")}/' + param1 + '/c/' + param2;
console.log(url); // "http://localhost:8080/whatever/a/b/something/c/somethingelse"

在UrlMappings.groovy中:

class UrlMappings {

name mymappingname: "/a/b/$param1?/c/$param2?" {
        controller = 'myRestHandler'
    }
}

答案 3 :(得分:0)

我使用createLink解决(action:'index',controller:'Root',params:[id:id],absolute:true)