- 前言
- 第一部分 核心实现
- 第 1 章 Spring 整体架构和环境搭建
- 第 2 章 容器的基本实现
- 第 3 章 默认标签的解析
- 第 4 章 自定义标签的解析
- 第 5 章 bean 的加载
- 第 6 章 容器的功能扩展
- 第 7 章 AOP
- 第二部分 企业应用
- 第 8 章 数据库连接 JDBC
- 第 9 章 整合 MyBatis
- 第 10 章 事务
- 第 11 章 SpringMVC
- 第 12 章 远程服务
- 第 13 章 Spring 消息
11.4.5 缓存处理
在研究 Spring 对缓存处理的功能支持前,我们先了解一个概念:Last-Modified 缓存机制。
(1)在客户端第一次输入 URL 时,服务器端会返回内容和状态码 200,表示请求成功,同
时会添加一个“Last-Modified”的响应头,表示此文件在服务器上的最后更新时间,例如,“Last-Modified:Wed, 14 Mar 2012 10:22:42 GMT”表示最后更新时间为(2012-03-14 10:22)。
(2)客户端第二次请求此 URL 时,客户端会向服务器发送请求头“If-Modified-Since”,询问服务器该时间之后当前请求内容是否有被修改过,如“If-Modified-Since: Wed, 14 Mar 2012 10:22:42 GMT”,如果服务器端的内容没有变化,则自动返回 HTTP 304 状态码(只要响应头,内容为空,这样就节省了网络带宽)。
Spring 提供的对 Last-Modified 机制的支持,只需要实现 LastModified 接口,如下所示:
public class HelloWorldLastModifiedCacheController extends AbstractController implements
LastModified {
private long lastModified;
protected ModelAndView handleRequestInternal(HttpServletRequest req, Http
ServletResponse resp) throws Exception {
//点击后再次请求当前页面
resp.getWriter().write("<a href=''>this</a>");
return null;
}
public long getLastModified(HttpServletRequest request) {
if(lastModified == 0L) {
//第一次或者逻辑有变化的时候,应该重新返回内容最新修改的时间戳
lastModified = System.currentTimeMillis();
}
return lastModified;
}
}
HelloWorldLastModifiedCacheController 只需要实现 LastModified 接口的 getLastModified 方法,保证当内容发生改变时返回最新的修改时间即可。
Spring 判断是否过期,通过判断请求的“If-Modified-Since”是否大于等于当前的 getLast Modified 方法的时间戳,如果是,则认为没有修改。上面的 controller 与普通的 controller 并无太大差别,声明如下:
<bean name="/helloLastModified" class="com.test.controller.HelloWorldLastModifiedCache Controller"/>
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论