Java 在Spring MVC Hibernate应用程序中通过缓存提高页面加载时间

Java 在Spring MVC Hibernate应用程序中通过缓存提高页面加载时间,java,hibernate,spring-mvc,caching,Java,Hibernate,Spring Mvc,Caching,我已经创建了一个Spring MVC Hibernate应用程序。我已经在使用Hibernate的二级EhCache来提高性能 我希望缓存我的网页,以便当用户第二次访问该网页时,它可以更快地从缓存中加载该网页。页面内容不会经常改变;大约每两个月一次 我正在使用下面的代码缓存我的整个页面: @RequestMapping(value = "/products", method = RequestMethod.GET) public String getAllProducts(ModelMa

我已经创建了一个Spring MVC Hibernate应用程序。我已经在使用Hibernate的二级EhCache来提高性能

我希望缓存我的网页,以便当用户第二次访问该网页时,它可以更快地从缓存中加载该网页。页面内容不会经常改变;大约每两个月一次

我正在使用下面的代码缓存我的整个页面:

  @RequestMapping(value = "/products", method = RequestMethod.GET)
  public String getAllProducts(ModelMap model,HttpServletRequest request,HttpServletResponse response )  {
    model.addAttribute("products", "all products from backend");

    // caching the page
    response.addHeader("Cache-Control","max-age="+CACHE_DURATION_IN_SECOND);//1
    response.addHeader("Cache-Control", "must-revalidate");//2
    response.setDateHeader("Last-Modified", now);//3
    response.setDateHeader("Expires", now + CACHE_DURATION_IN_MS);//4

    return "all-products";
  }
我的问题是:

  • 上述代码是否足以处理网页缓存
  • 如果是这样,我是否需要在所有控制器方法中添加上述代码以启用所有JSP的缓存
  • 如果没有,缓存网页的最佳方式是什么
  • 此外,我想缓存我的网页,以便当用户访问 第二次,它会更快地从缓存加载页面


    看起来您在这里指的是浏览器缓存-如果是这样,那么您的代码意味着对
    /products
    的GET请求的响应将与指示浏览器在特定时间段内缓存响应的标题一起发送。现在,来自浏览器的所有GET请求(ajax或非ajax)都应该从浏览器缓存中获得服务。如果这是你的目标,那就好了。但是,还有另一种可能的缓存(通常用于不经常更改的页面片段),其中响应存储在服务器端缓存中。例如,如果您使用JSP作为视图模板,那么可以使用类似的内容。在这种情况下,缓存完全发生在服务器上,在从响应的静态和动态部分聚合响应时非常有用。

    您也可以使用ETag,签出筛选器

    由于ETag基于响应内容,因此仍然呈现响应(例如视图)。因此,此筛选器只节省带宽,而不节省服务器性能


    你的浏览器不是在缓存你的页面吗?你有没有检查过没有这个代码?@ViswanathLekshmanan:没有。你想说我们不需要做任何特殊的事情来缓存网页,浏览器会自动处理(何时过期、重新验证等)?你的浏览器会自动缓存HTML、JS、CSS页面。当我们不需要使用页眉缓存页面时,我们会限制浏览器。请检查是否相同您的理解是否正确。除了Cache taglib(您上面提到的)之外,还有其他方法吗?我不想更改我的jsp代码?