其实Servlet(包括JSP)的缓存清理操作起来非常简单,但就是因为太简单有时会让我们忽略它。
我在做一个主要在手机端服务的一个网站,一开始并没有处理缓存,因为没有必须清除缓存的理由。
后来在用的时候会偶尔出现相同的bug:登陆失败!登陆的过程是:我们的入口发送一个登陆请求到平台商服务器,平台商服务器解析我们的请求,之后给出登陆令牌类似的东西再请求我们的服务器。问题就出在:平台商服务器不能正确地解析我们的请求,报出异常,这不是最麻烦的,最麻烦的是,我不知道是什么原因造成的,没有办法还原现场,自己测试总是正常的;这个问题每天出现几十次,概率在千分之一左右,不是很频繁,所以下决心改了几十次(有记录的就17次),也和平台技术人员沟通过多次,始终没有得到解决。
突然今天灵感来了,不会是缓存吧!然后我就把项目相关的地方通通把缓存清理掉,结果...很满意!
老罗说,它手机那个新软件(好像是闪电胶带啥的)刚出来的时候,他也就玩了几百遍吧。我这个问题解决之后,我终于理解他了,我也就在手机上刷了几十遍吧。不是因为技术上有了啥突破,就是因为困扰这么久的问题被突然解决了有点小兴奋...
既然说了Servlet缓存清理,就把代码列一下吧:
服务器端:
// 我是写在过滤器里的,所以这里要强制类型转换一下 HttpServletResponse resp = (HttpServletResponse) response; resp.setHeader("expires", "-1"); resp.setHeader("pragma", "no-cache"); resp.setHeader("cache-control", "no-cache");
JSP页面:
<meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="Cache-Control" content="no-cache"> <meta http-equiv="Expires" content="0">