星期五, 12月 11, 2009

Tomcat 之 HttpServletRequest之getRequestURL()

由 Tomcat5.0 換到 Tomcat 5.5...
發現到有一些程式不能跑了
最後發現 Tomcat 在處理 HttpServletRequest.getRequestURL() 的做法跟以前不一樣了..

之前 Tomcat 會回傳最剛開始跟 Server 要的網址, 不管後面的 Servlet 如何 forward...

其實若是參考 API 的說明:

Reconstructs the URL the client used to make the request. The returned URL contains a protocol, server name, port number, and server path, but it does not include query string parameters.


看起來並無問題...

不過現在 Tomcat 5.5 並不是這樣處理了...
若 client 要求 /a.do 而, a.do 會 forward 到 b.jsp.
則 b.jsp 若呼叫 HttpServletRequest.getRequestURL(), 將會得到 http://.../b.jsp

而非預期之 http://.../a.do

最後查了 Tomcat 的 Bugzilla 中, 如下: http://issues.apache.org/bugzilla/show_bug.cgi?id=28222

結論是, 現在 Tomcat 5.5 的實作才是正確的~~

找了好久才找到..最後發現..Tomcat 5.5 的 change list 中就有說明到這一點了...
以後應該要多加注意 change list的...

0 Comments:

張貼留言

<< Home