HttpServletRequest 介面的 getRequestURI() [或 getQueryString()] method
索性, Grails framework 在 Groovy MOP 的支援下, 使得使用這些標準 API(getter) 是輕鬆、直觀的:
request.requestURI [或 request.queryString]
而且同 JSP 的 EL 一樣, 在 GSP 中可以像 EL 一樣來取值:
${request.requestURI} [或 ${request.queryString}]
然而, 該取用 request.requestURI ? 還是取用 request.uri 或者是 request.request.requestURI 才正確呢?
一般的理解, 相較於 servlet API 來說, 直覺會使用 request.requestURI。但, 在 Jetty(開發環境) 與 WebLogic 10.2(執行環境) 兩者 web container 中, 實作上所回應的結果卻不一致, 真出乎我意料之外。
此時, 可以請出 UrlPathHelper class 來解決這樣子的情形:
def helper = new org.springframework.web.util.UrlPathHelper() def reqURI = helper.getOriginatingRequestUri(request) def qryString = helper.getOriginatingQueryString(request)
因此, 為避免使用 groovy/Java 與 web container 上實際結果的差異, 經由不斷測試、驗證而得到結果。
軟體開發的解決之道, 仍是老話一句: 測試再測試。這也就是為什麼 TDD(Test-Driven Development) 那麼重要。
沒有留言:
張貼留言