我创建了一个 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";
}
我的问题是:
- 上面的代码足以处理网页缓存吗?
- 如果是这样,我是否需要在所有 Controller 方法中添加上述代码以启用所有 JSP 的缓存?
- 如果没有,缓存网页的最佳方式是什么?
最佳答案
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/