java - 通过在 Spring-MVC Hibernate 应用程序中进行缓存来缩短页面加载时间

标签 java hibernate spring-mvc caching

我创建了一个 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";
  }

我的问题是:

  1. 上面的代码足以处理网页缓存吗?
  2. 如果是这样,我是否需要在所有 Controller 方法中添加上述代码以启用所有 JSP 的缓存?
  3. 如果没有,缓存网页的最佳方式是什么?

最佳答案

Furthermore I want to cache my web page so that when user visits the page second time, It loads the page more quickly from cache.

看起来您的意思是这里的浏览器缓存 - 如果是这样,那么您的代码意味着对 /products 的 GET 请求的响应是通过 header 发送的,该 header 指示浏览器缓存特定的响应时期。现在,来自浏览器的所有 GET 请求(ajax 或非 ajax)都应该由浏览器缓存提供服务。如果那是你的客观目标,那就没问题了。然而,还有另一种可能的缓存(通常用于不经常更改的页面片段)——响应存储在服务器端缓存中。例如,如果您使用 JSP 作为 View 模板,则类似于 this technique可以使用。在这种情况下,缓存完全发生在服务器上,并且在聚合响应的静态和动态部分的响应时很有帮助。

关于java - 通过在 Spring-MVC Hibernate 应用程序中进行缓存来缩短页面加载时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33170108/

相关文章:

hibernate - 为什么Grails可搜索插件在Hibernate AutoFlush上导致错误?

java - 在 spring mvc hibernate 应用程序中从字符串转换为 blob 时出错

java - Spring 启动 : Configure a url prefix for RestControllers

java - 我需要一个使用 ssl 的 java stomp 客户端库

java - Hibernate:未能延迟初始化角色集合,没有 session 或 session 已关闭

java - 需要将第一个对象的字段复制到第二个对象中

java - 有一个带注释的抽象 Controller 类是否有意义 - Spring MVC

Java 机器因 MySQL 结果太大而崩溃。

java - 如何在java中获取二进制数的前导零

java - Java 对象头中有什么?