[英]Handling the browser 'Back' button in jsp
我有一個jsp搜索頁面(Search.jsp)和一個結果頁面(Result.jsp),兩者都可以選擇搜索條件。 然后將參數傳遞給Java控制器文件(Controller.java)以構建查詢字符串並執行查詢搜索。 查詢字符串和搜索結果將傳遞到Result.jsp進行顯示。
當前,我使用ServletContext來記住已處理的查詢字符串,如果用戶使用Result.jsp選擇搜索條件,Controller.java會將這些條件附加到現有查詢字符串中。 如果我使用Result.jsp進行了一些搜索。 例如,查詢字符串將在Result.jsp頁面上顯示((Query1) AND Query2) AND Query3
。 然后使用瀏覽器的“后退”按鈕返回上一個顯示頁面。 對於同一示例,查詢字符串顯示(Query1) AND Query2
。 然后,如果我再次搜索。 查詢字符串(((Query1) AND Query2) AND Query3) AND Query4
將被使用。 我知道這在我當前的實現中是可以預期的,因為Result.jsp不會對已處理的查詢字符串進行任何修改。
但是,我想當用戶使用瀏覽器的后退按鈕時,例如查詢字符串在頁面上顯示為(Query1) AND Query2
,並執行搜索,查詢字符串應為((Query1) AND Query2) AND Query4
,其中查詢字符串是基於Result.jsp頁面上當前顯示的查詢字符串以及當前選擇內容構建的。 我怎樣才能做到這一點? 聽起來很簡單,但是我嘗試了幾種使用Result.jsp中的方法更新查詢字符串的方法,但是仍然無法正確執行。 因此,我想知道我使用<c:set>
是否錯誤。 我想聽聽你的建議。 提前致謝。
目前,我使用ServletContext來記住已處理的查詢字符串
您是否意識到ServletContext
在訪問您的Web應用程序的所有用戶/會話之間共享? 訪問者X對其進行修改后,更改將反映給所有其他訪問者 。 您是否不想將其存儲在HttpSession
以保持特定於數據訪問者的數據?
我出於某些原因想要使用后退按鈕
我真的很難理解您的功能要求( 某些原因 )。 但是至少,由於您希望后退按鈕可以正常工作,因此您希望在此處使用冪等請求。 因此,在適用的情況下,將POST替換為GET。
每當您想在服務器上重新啟動真實的HTTP請求而不是從瀏覽器的緩存中加載頁面時,都想通過向響應添加以下標頭來指示瀏覽器不要緩存頁面:
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setDateHeader("Expires", 0); // Proxies.
您可以在控制器中執行此操作,也可以在涵蓋目標url-pattern
的某些Filter
此操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.