从缓存调用Jsp页面而不是从服务器加载

时间:2010-03-11 05:03:16

标签: jsp browser caching

我正在调用一个基于2个参数的jsp,它以这种方式从jsp 1传递。我将2个参数传递给2.jsp并根据这2个参数显示在2.jsp中的数据。我有一个循环我有许多href,就像我在下面描述的那样。每个href都将一组不同的值传递给2.jsp。

out.println("<a href=\"2.jsp?prId=" + prog.getId() + count + "\">" + prog.getName() + "</a>");

我使用以下行

在2.jsp中检索这两个参数
count_id = request.getParameter( "country_id" );
prog_id  = Integer.parseInt(request.getParameter( "program_id" ));

基于这两个参数,我在2.jsp

中显示相应的数据

现在我在2.jsp中有一个后退按钮,我使用以下代码调用2.jsp中的1.jsp

<a href="1.jsp"><img src="/image/back.gif" border="0"></a>

问题是,当我使用后退按钮并返回1.jsp并选择另一个href时,就像我上面描述的那样,我得到了与之前选择的href相关的数据。

我想问题是当我请求页面是从缓存而不是从服务器加载时。 请建议

1 个答案:

答案 0 :(得分:1)

您只需要指示浏览器不缓存页面。您可以借助servlet过滤器来设置以下响应标头:

@WebFilter("*.jsp")
public class NoCacheFilter implements Filter {

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        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.
        chain.doFilter(req, res);
    }

    // ...
}

现在只需将此过滤器映射到覆盖感兴趣的JSP页面的URL模式。例如。 *.jsp/somefolder/*(示例中的@WebFilter为所有JSP执行此操作。)

确保在测试前清除浏览器缓存。

另见: