设置缓存有两种场景:
1:场景一是对于不经常变化的数据 在servlet里可以为其设置合理的缓存时间 以避免浏览器频繁向服务器发送请求。
例如:设置缓存时间为3分钟
package cn.nyist.servlet.context;
public class ServletDemo10 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String value="abc";
response.setDateHeader("experice", System.currentTimeMillis()+1000*180);
response.getWriter().write(value);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
}
2 场景二 :如果要实现一种高级功能 即客户端请求动态web资源时 动态web资源发现发给客户端的数据更新了 就发送给客户端最新的数据 如果没有更新 动态web资源就要客户访问它的缓存数据。此种情况可以复写web资源的(即servlet)的getLastModify()方法实现
例如:读取工程的 /webRoot 下的bbb.text 文件 当bbb.text 内容没有更新时候 客户端访问时候(非第一次)就读取缓存数据 如果bbb.text 更新了 就发送最新的数据
package cn.nyist.servlet.context;
public class ServletDemo11 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletContext context=this.getServletContext();
InputStream in=context.getResourceAsStream("/bbb.text");
BufferedReader br=new BufferedReader(new InputStreamReader(in));
String line= br.readLine();
response.getWriter().write(line);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
@Override
//复写了service中的getLastModified()方法
protected long getLastModified(HttpServletRequest req) {
//获取文件
ServletContext context=this.getServletContext();
String path = context.getRealPath("/bbb.text");
File file=new File(path);
return file.lastModified();
}
}
参考: