2

我正在使用struts.serve.static=trueand struts.serve.static.browserCache=false,但即使在注销后后退按钮也可以使用。当我单击后退按钮时,它将转到上一个屏幕。我该如何解决这个问题?

4

2 回答 2

2

S2 将使用上述常量告诉浏览器是否需要缓存静态内容。

struts.serve.static=true

以上属性由FilterDispatcher

  • 如果为 true,则 Struts 从其 jar 中提供静态内容。
  • 如果为 false,则静态内容必须在 /struts 中可用

struts.serve.static.browserCache=true被使用FilterDispatcher并且仅在struts.serve.static=true.

  • 如果为 true -> Struts 将写出静态内容的标头,这样它们将被 Web 浏览器缓存(使用 Date、Cache-Content、Pragma、Expires 标头)。
  • 如果为 false -> Struts 将写出静态内容的标头,这样它们就不会被 Web 浏览器缓存(使用 Cache-Content、Pragma、Expires 标头)简而言之,这两个常量都是告诉浏览器是否需要缓存的一种方式静态内容是否由 S2 提供。

关于浏览器后退按钮,我们不能禁用浏览器后退按钮作为浏览器 API 的一部分,并且当您点击后退按钮时,浏览器会从其缓存中提供内容而无需访问服务器。

您可以通过使用缓存控制标头来要求浏览器不要缓存内容,但浏览器是否尊重它们。在您的 JSP 中使用以下代码

response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Expires", "0");

或者,您可以创建一个拦截器并使用所需的操作对其进行配置,以便可以设置标头。请通过以下线程了解有关如何控制 S2 中的缓存的更多详细信息

于 2012-05-08T11:45:35.203 回答
1

创建自定义拦截器以将标头添加到每个 JSPresponse比添加response.setHeader到每个 jsp 更简单(如果您使用的是 Struts2)。

请检查此链接以获取可以正常工作的漂亮示例。

于 2012-08-10T19:52:07.183 回答