以下代码使用 Eclipse 的嵌入式 tcServer 2.7 作为 Web 容器在 Grails 2.0.4 和 Eclipse STS 3.2 上按预期工作......
class TestController {
def service() {
println request.request.getRequestURL()
//render response here...
}
对于 的客户端请求http://svr1:8080/testapp/test/node1
,上面的代码打印完整的请求 URL,http://svr1:8080/testapp/test/node1
。
我们创建了一个 WAR 并将其部署到 Jetty 8.1.10,但发现它request.request
返回 null,所以上面的代码失败并返回一个空指针。我们尝试使用request.getRequestURL()
,但它返回一个包含 grails 调度语法的 URL,因此它与我们需要的原始客户端请求 url 不匹配。
request.getServerName()
作为一种解决方法,我们使用,request.getServerPort()
和request.getContextPath()
,手动构建了大部分 URL http://svr1:8080/testapp
,但仍然忽略了 uri 部分 , /test/node1
。我们假设这个问题可能归因于 Jetty 的 Servlet API 实现,但如果是这样的话,肯定有人会在我们之前发现这个问题。