次のコードは、Grails 2.0.4 および Eclipse STS 3.2 で、Eclipse の組み込み tcServer 2.7 を Web コンテナーとして使用して期待どおりに動作します...
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 を返すことが判明したため、上記のコードは null ポインターで失敗します。使用してみrequest.getRequestURL()
ましたが、grails ディスパッチ構文を含む URL が返されるため、必要な元のクライアント リクエスト URL と一致しません。
request.getServerName()
回避策として、 、request.getServerPort()
、およびrequest.getContextPath()
を使用してほとんどの URL を手動で作成http://svr1:8080/testapp
しましたが、それでも uri 部分は省略されてい/test/node1
ます。この問題は、Jetty のサーブレット API 実装に起因する可能性があると想定していますが、その場合は、他の誰かが私たちの前にこれに気付いていたはずです。