2013-10-11 45 views
0

使用JSP,我需要在做一些基本檢查後重定向到另一個頁面。目標網址需要提供一些額外的數據(與進行的檢查相關)。一個顯而易見的方法是:使用位置標題重定向URL,傳遞其他數據

String extraData = [calculate extra data]; 
response.setHeader("Loction", "target.jsp?extradata=" + extraData); 

但是,我不想在瀏覽器的地址框中向用戶公開額外的數據。

因爲這一切都是在JSP中,另一種選擇是設置一個會話屬性:

String extraData = [calculate extra data]; 
session.setAttribute("extradata", extraData); 
response.setHeader("Location", "target.jsp"); 

然後target.jsp可以從會話屬性的額外數據。

但是,目標文件可能位於另一臺服務器上,當然這不會共享相同的會話。

是否有一些其他方式可以重定向到另一個URL並傳遞額外的數據而不是URL本身?例如,是否有任何方法可能定義將在HttpServletRequest中傳遞到目標URL的附加頭文件?

回答

0

您可以將自定義標題添加到響應中。這些標題將發送給收件人,因此可以從響應的標題中讀取。

response.addHeader(name, value); 
request.getRequestDispatcher("target.jsp").forward(request, response); 

但是,這不能擴展到當前的servlet上下文之外。如果您使用重定向:

response.sendRedirect("target.jsp"); 

標頭丟失。

或者,您可以對URL中的數據進行編碼,以便將其隱藏起來。這將要求它由客戶端的收件人頁面解碼。

使用AJAX可能有助於隱藏數據。如果其他服務器上的頁面被重定向到(如上所述),那麼它會對您的服務器上的另一個servlet進行AJAX調用,該servlet響應您希望將其發送的數據封裝在響應中。

+0

非常感謝您的回覆。不幸的是,目標頁面位於不同的應用程序中,因此標題不能通過。我懷疑我將不得不通過URL傳遞數據。 – cliveb

+0

將數據作爲參數傳遞將是最簡單的解決方案,如果數據不敏感,則不應該是個問題。順便說一句,如果你想出了一個更好的解決方案,在這裏發佈,我很想知道它。 – Alex