2016-03-28 77 views
0

簡而言之,我有一個將GET請求轉發到JSP的servlet,我想從用戶「隱藏」目標URL 。使用RequestDispatcher將請求從servlet轉發到JSP不會隱藏目標URL

我的設置如下:

  1. 一個servlet,映射到URL 「www.mydomain.com/pages/page1」
  2. 一個JSP,在地址「/ WEB-INF /頁/第1頁.jsp「,相對於應用程序根目錄。 JSP駐留在WEB-INF目錄中,以便不能直接從瀏覽器訪問。

在從瀏覽器中,servlet預處理輸入GET請求接入,並使用下面的代碼段將其轉發給JSP:

request.getRequestDispatcher("/WEB-INF/pages/page1.jsp").forward(request, response); 

的期望的行爲是爲瀏覽器保持URL「www.mydomain.com/pages/page1」,而用戶看到JSP的內容。

不幸的是,瀏覽器始終切換到顯示JSP的URL: 「www.mydomain.com/WEB-INF/pages/page1.jsp」(經測試,在Chrome和Firefox)

誰能告訴我,什麼可能會導致這種行爲?

來源: 該解決方案在此CodeRanch答案,在他們成功地「隱藏」的地址到JSP描述:http://www.coderanch.com/t/618800/JSP/java/Url-hiding

+1

這應該工作得很好。你可以發送servlet的完整'doGet()'方法和'web.xml'中的'servlet-mapping'。 –

+0

@ W-S,感謝您確認您也希望這能夠奏效。這激勵我做一些調試,並找出問題的原因。請參閱下面的答案。 – paulkore

回答

0

已經做了一些廣泛的關注着我的實現,我能隔離這個問題的原因。確切的源代碼太複雜,不能在這裏發佈,實際上是不相關的。

這個問題是由這個模糊的Javascript行引起的,通過scriptlet(過時的做法)從單獨的實用程序類中拉入到JSP中。

<script type='text/javascript'> 
    window.history.replaceState(null, document.title, sanitizedURL); 
</script> 

遺留原因,該頁面的網址正在「消毒」通過刪除其查詢字符串的一部分,然後在「替換窗口歷史狀態」發生。我不確定這是否符合頁面重新加載的要求,但不必要的副作用是顯示實際資源URL「www.mydomain.com/WEB-INF/pages/page1.jsp」

Bottom行:如果您遇到類似的問題,請嘗試查找與窗口/文檔狀態相關的Javascript