2016-02-05 52 views
0

我正在開發一個java web應用程序,並且部署在Tomcat上。我正在使用servlet來處理一些功能。在Servlet中,我使用 SendRedirect方法從一個servlt重定向到另一個servlet,並且它已成功重定向到其他servlet。當Tomcat升級時HttpServletResponse.sendRedirect不工作

問題:前面我們wereusing Tomcat的版本 - 7.0.65但最近已經升級到7.0.67。 將tomcat升級到更新版本(7.0.67)後,發送重定向呼叫不起作用。

實施例:

Public class MainServlet extends HttpServlet { 

    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

    // do some operations.. 
    String emptyStr = " "; 
    String urlPath = "http:localhost:8085/DemoProject/demoServlet? username=dummy&eid=emptyStr"; 
    response.sendRedirect(urlPath); 
    return; 
    } 

} 

我看到Tomcat的規範也和它們talkiing約重定向其低於whic我無法理解。

Apache Tomcat 7.0.67 發佈日期:2015-12-10 完整的發行註記可以在這裏找到。 56917:根據RFC7231(HTTP/1.1),允許HTTP/1.1及更高版本重定向使用相對URI。這由上下文中的新屬性useRelativeRedirects控制,並且默認爲true。 (markt) 58660:更正由於將上下文根的重定向從映射程序移動到默認Servlet而導致的7.0.66中的迴歸。 (markt) 在部署應用程序時在HostConfig中修復潛在的NPE。通過覆蓋率掃描報告問題。 (violetagg) 58655:使用RemoteIpFilter調用HttpServletResponse.sendRedirect()時修復IllegalStateException。這是由於嘗試正確生成重定向的絕對URI而引起的。對於56917的修復,重定向現在可能是相對的,使得RemoteIpFilter的sendRedirect()實現更加簡單。這也解決了在重定向從http到https到從https到http重定向時可能沒有按預期行事的問題。 (markt)

請仔細檢查問題,並告訴我,如果您有任何建議。

任何建議,將不勝感激。

+0

您在代碼段中存在兩個編譯錯誤,並且URL語法錯誤。請不要粗心發佈有問題的代碼,並從您的問題中刪除那些紅鯡魚。 – BalusC

+0

Hello @BususC,請查看編輯後的問題。我的意圖是指定一些例子不提供我正在運行的運行代碼。 –

回答

0

我實際上正在運行一個我繼承的,在Tomcat 7.0.62中運行的應用程序的同樣的事情。我必須執行的升級路徑是使用Tomcat 8.x和Java 8.在測試應用程序時,它也打破了。

將其縮小到爲重定向生成的URL中存在空格(未編碼且未使用+),所有7.0.65版本都沒有問題,一旦7.0.67命中,Tomcat不再處理重定向URL中的空格(這是一個絕對的https:// ....路徑,不是相對的)

sendRedirect的行爲似乎直接受到更改在解決方案是正確的URL編碼您的重定向URL,以便空格,特殊字符等編碼之前調用sendRedirect函數的位置去

只是我的2美分的主題因爲我最近也碰到過這個。