返回介绍

11.4.5 缓存处理

发布于 2025-04-22 22:09:17 字数 1612 浏览 0 评论 0 收藏

在研究 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&nbsp;Modified 方法的时间戳,如果是,则认为没有修改。上面的 controller 与普通的 controller 并无太大差别,声明如下:

<bean name="/helloLastModified" class="com.test.controller.HelloWorldLastModifiedCache&nbsp;Controller"/>

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。