我有一个jsp搜索页面(Search.jsp)和一个结果页面(Result.jsp),它们都可以选择搜索条件。然后将参数传递给java控制器文件(Controller.java)以构建查询字符串并执行查询搜索。查询字符串和搜索结果将传递到 Result.jsp 进行显示。
目前,我使用 servletContext 来记住处理后的查询字符串,如果用户使用 Result.jsp 选择搜索条件,Controller.java 会将此类条件附加到现有查询字符串中。如果我使用 Result.jsp 进行一些搜索。例如,查询字符串将显示((Query1) AND Query2) AND Query3
在 Result.jsp 页面上。然后使用浏览器的后退按钮返回到上一个显示页面。对于同一示例,查询字符串显示(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
之间共享all正在访问您的网络应用程序的用户/会话?一旦访问者 X 对其进行修改,更改就会反映在所有其他访客。难道你不想把它存储在HttpSession
保持数据访问者特定?
也可以看看:
- Servlet 生命周期和多线程 https://stackoverflow.com/questions/3106452/java-servlet-instantiation-and-session-variables/3106909#3106909
我想使用后退按钮因为某些原因
我真的很难理解你的功能需求(一些原因部分)。但至少,由于您希望后退按钮能够正常工作,因此您希望在此处使用幂等请求。因此,如果适用,请将 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.
您可以在控制器或其他控制器中执行此操作Filter
覆盖url-pattern
出于兴趣。
也可以看看:
- 确保网页未在所有浏览器中缓存 https://stackoverflow.com/questions/49547/making-sure-a-web-page-is-not-cached-across-all-browsers
- Web浏览器缓存教程 http://www.mnot.net/cache_docs/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)