繁体   English   中英

处理jsp中的浏览器“后退”按钮

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM