【发布时间】:2010-02-12 05:40:04
【问题描述】:
如何使用spring处理返回浏览器按钮问题?
在我的应用程序中,用户登录正确,并且当用户单击后退按钮时,页面状态未得到维护。即使用户单击后退按钮/前进按钮,我也要保持页面状态
谢谢
【问题讨论】:
-
您可以使用拦截轻松做到这一点:stackoverflow.com/questions/26420941/…
标签: spring jsp spring-mvc
如何使用spring处理返回浏览器按钮问题?
在我的应用程序中,用户登录正确,并且当用户单击后退按钮时,页面状态未得到维护。即使用户单击后退按钮/前进按钮,我也要保持页面状态
谢谢
【问题讨论】:
标签: spring jsp spring-mvc
显然这些页面是从浏览器缓存中请求的。您需要禁用相关页面的客户端缓存。您可以通过创建一个Filter 来实现此目的,该Filter 侦听您要禁用缓存的页面的url-pattern,例如*.jsp。在doFilter() 方法中执行以下操作:
HttpServletResponse httpres = (HttpServletResponse) response;
httpres.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
httpres.setHeader("Pragma", "no-cache"); // HTTP 1.0.
httpres.setDateHeader("Expires", 0); // Proxies.
chain.doFilter(request, response);
这样,客户端应用程序将被指示不缓存与此过滤器的url-pattern 匹配的请求。然后按下后退按钮将强制来自服务器的 real 请求,并带有建议的新数据。要在请求之间保留某些服务器端数据,您需要获取会话范围或仅使用 GET 请求。
哦,别忘了在实现之后和测试之前先清除浏览器缓存;)
【讨论】:
你可以使用 Spring Web Flow
【讨论】:
在 Servlet 上下文中配置一个拦截器,如下所示:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**/*"/>
<beans:bean id="webContentInterceptor" class="org.springframework.web.servlet.mvc.WebContentInterceptor">
<beans:property name="cacheSeconds" value="0"/>
<beans:property name="useExpiresHeader" value="true"/>
<beans:property name="useCacheControlHeader" value="true"/>
<beans:property name="useCacheControlNoStore" value="true"/>
</beans:bean>
</mvc:interceptor>
</mvc:interceptors>
注意:测试应用程序时不要忘记删除浏览器缓存。
【讨论】: