使用response来控制浏览器的缓存

        缓存这个技术在咱们实际的开发中是很是经常使用的,也是很是重要的一项技术。主要用于客户端(浏览器)向服务器端请求的是一些比较大的数据,而且这个数据在短期内不会常常发生变化的状况,好比一些网站的logo图片,它是一个网站的标志,通常不会发生变化,若是不缓存的话,而logo图片又比较大的话,那么浏览器每次发送请求时,服务端都要返回logo图片这个大数据信息,会影响到服务器的性能和效率,服务器端变慢了,也势必会致使用户页面看到的数据加载变慢。若是我么对图片进行一个合适时间内的缓存的话,这样会大大提升服务端的效率,还能提升客户端的用户体验呢!java

  使用response来设置缓存,主要时设置http的响应头的expires的信息,示例代码以下:浏览器

package com.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 设置缓存
 * 
 * @author Administrator 缓存是当浏览器第一次发送请求,若是服务器设置了缓存,就会将第一次请求得到的数据缓存在浏览器,那么在缓存时间内,浏览器是不会想服务器发送请求的,直接从缓存中获取数据
 */
@WebServlet("/buff.do")
public class BufferServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 这里的时间是从1970开始,因此要设置当前时间+缓存的时间,时间单位为毫秒,这里缓存的时间为1分钟
        response.setDateHeader("expires", System.currentTimeMillis() + 1000 * 60);
        // 用来测试在缓存时间内,浏览器是否还向服务端发送请求
        System.out.println("enter");
        // 模拟的大数据
        String bigData = "this is a big data,but it is not change.";
        response.getWriter().print(bigData);
    }

}

在缓存时间内不管你发送了多少次请求输出的结果:缓存

enter服务器

而且从请求的响应头性能

Server: Apache-Coyote/1.1
Expires: Fri, 07 Jul 2017 07:49:26 GMT
Content-Length: 40
Date: Fri, 07 Jul 2017 07:48:26 GMT测试

从上面的结果能够看出,当咱们在服务端设置了缓存了,那么在缓存时间内,浏览器发送请求,取得数据时从本地缓存中获取的。大数据

至此,一个简单的使用response实现缓存的小案例演示完毕,有不足的地方,但愿你们多多提意见网站

相关文章
相关标签/搜索