清理网站缓存的几种方法

方法一:

<%response.setHeader("Pragma","No-cache");
response.addHeader( "Cache-Control", "must-revalidate" );
response.addHeader( "Cache-Control", "no-cache" );
response.addHeader( "Cache-Control", "no-store" );
response.setDateHeader("Expires", 0);
response.flushBuffer();%>

注意:单纯的使用 response.setRequestHeader("Cache-Control","no-cache")无效。

Cache-Control头域
      Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。各个消息中的指令含义如下:
      Public:指示响应可被任何缓存区缓存。
      Private:指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。
      no-cache:指示请求或响应消息不能缓存
      no-store:用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。
      max-age:指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
      min-fresh:指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
      max-stale:指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。

方法二:META方法

给页面头部<head>中添加如下代码:

<META http-equiv="Content-Type" content="text/html; charset=gb2312">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="0">

http头部信息:"Expires"和"Cache-Control"为应用程序服务器提供了一个控制浏览器和代理服务器上缓存机制 。http头信息Expires告诉代理服务器缓存页面过期时间。http1.1规范中新定义的头部信息Cache-Control可以通知浏览器不缓存任何页面,每次浏览器重新访问服务器获取页面;

no-cache:强制缓存从服务器上获取新页面

no-store:在任何环境下缓存不保存任何页面

方法三:给每个url加参数

在需要打开的url后面增加一个随机数:random():这样每次请求url后面参数不一样,相当于请求的是不同多的页面,用这种方式也是可以达到我们的要求;

URL 参数后加上 "?ran=" + Math.random(); //当然这里参数 ran可以任意取了

但是一个个页面添加比较麻烦,毕竟上面方式还是有缺陷的,每个页面加载,这样在我们后面项目稳定后如果还是使用的话,就会影响程序给用户带来的体验了,现在我们主要是看看怎么通过java代码来全局控制缓存,我使用的方法是过滤器,在页面请求的时候,对请求的资源加上参数,代码如下:

1.使用filter加载http头:

package com.taiji.filter;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebFilter(filterName = "HttpheadFilter", urlPatterns = { "/*" })
public class HttpheadFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {//response对象HttpServletResponse res = (HttpServletResponse) response;// 设定网页的到期时间,一旦过期则必须到服务器上重新调用res.setDateHeader("Expires", -1);// Cache-Control 指定请求和响应应遵循的缓存机制 no-cache指示请求或响应消息是不能缓存的res.setHeader("Cache-Control", "no-cache");// 用于设定禁止浏览器从本地缓存中调用页面内容,设定后一旦离开页面就无法从Cache中再调出res.setHeader("Pragma", "no-cache");// 放行chain.doFilter(request, res);}@Overridepublic void destroy() {}
}

2.是使用filter给url加参数;

package com.taiji.filter;import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;@WebFilter(filterName = "CacheCleanFilter", urlPatterns = { "/*" })
public class CacheCleanFilter implements Filter {private static Logger log = LoggerFactory.getLogger(CacheCleanFilter.class);private static final String STATIC_TAIL = "__xxxx_t=";@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}//给url加参数@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {HttpServletRequest req = (HttpServletRequest) request;HttpServletResponse resp = (HttpServletResponse) response;// 1.获取request请求的url访问路径String reqeustURL = req.getRequestURL().toString();String queryStr = req.getQueryString();// 2.通过给静态资源添加时间戳,去避免缓存问题// 当访问的静态资源是以*.js,*.css,*.html结尾时才给其加上时间戳if (reqeustURL != null) {if (checkURL(reqeustURL)) {String newURL = null;// 日期类型时间戳// String date = DateUtil.date2String(new Date(), "yyyyMMdd");// 毫秒值风格时间戳String date = new Date().getTime() + "";// 如果?后面有参数if (StringUtils.isNotBlank(queryStr)&& queryStr.trim().indexOf(STATIC_TAIL) == -1) {newURL = reqeustURL + "?" + queryStr + "&" + STATIC_TAIL+ date;newURL = newURL.replaceAll("\\n\\r", "");resp.setHeader("content-type","text/application;charset=UTF-8");resp.sendRedirect(newURL);}// 如果?后面没有参数if (StringUtils.isBlank(queryStr)) {newURL = reqeustURL + "?" + STATIC_TAIL + date;newURL = newURL.replaceAll("\\n\\r", "");resp.setHeader("content-type","text/application;charset=UTF-8");resp.sendRedirect(newURL);}if(!StringUtils.isBlank(queryStr)&&!(StringUtils.isNotBlank(queryStr)&& queryStr.trim().indexOf(STATIC_TAIL) == -1)){try {// 只要请求url不为空放行chain.doFilter(request, response);} catch (Exception e) {e.printStackTrace();log.info("[http请求出现异常,检查网络是否正常,或者再尝试一次![exception:]"+ e);}}}else{try {// 只要请求url不为空放行chain.doFilter(request, response);} catch (Exception e) {e.printStackTrace();log.info("[http请求出现异常,检查网络是否正常,或者再尝试一次![exception:]"+ e);}}}}/*** @description:判断url中是否包含这些后缀名* @param url*            访问的url路径* @return*/public Boolean checkURL(String url) {String[] checks = { ".js", ".css", ".jsp",".html" };for (int i = 0; i < checks.length; i++) {if (url.endsWith(checks[i])) {return true;}}return false;}/*** @description:解决302问题未解决)* @param* @param response*/public void fixResponse(HttpServletResponse response) {response.setCharacterEncoding("UTF-8");response.setHeader("content-type", "text/application;charset=UTF-8");response.setStatus(200);try {PrintWriter out = response.getWriter();out.write("<html lang='zh-CN'>"+ "<head><meta http-equiv='content-type' content='text/html;charset=UTF-8'/></head></html>");} catch (IOException e) {e.printStackTrace();log.info("[浏览器或系统出现异常,请重新访问]-[zengwei]");}}@Overridepublic void destroy() {}
}

java清除浏览器缓存相关推荐

  1. java ajax清除缓存_JS 清除浏览器缓存(转)

    关于浏览器缓遇新是直朋能到存 浏览器缓存,有时候我们需要他,因为他可以提高网站性能和浏览器速度,提高网站性能.但是有时候我们又不得不清除缓存,因为缓存可能误事,出现一些错误的数据.像股票类网站实时更新 ...

  2. win7怎么清理java缓存文件夹_Win7怎么清除浏览器缓存?清除电脑缓存的妙招

    电脑使用久了之后,缓存文件也将越来越多,慢慢的你会觉得系统变得很卡,所以我们需要定期的清除缓存.而产生缓存的来源,无非就是系统和运用程序,其中应用程序就属浏览器的缓存最多了,那么Win7系统下要怎么清 ...

  3. 过滤器篇(2)-----过滤器设置编码格式与清除浏览器缓存(EncodingFilter , NoCacheFilter)

    1. 编码过滤器(EncodingFilter) 1.编码设置过滤器Code . 其中主要目的是 : 使用过滤器 解决中文编码 问题 package com.Filter;import javax.s ...

  4. 解决web项目发布新版本需要清除浏览器缓存的问题

    原链接:https://www.jianshu.com/p/4ad18acb59d7 一.bug起因 最近做公司的项目,对样式进行了修改后,新版本上线.测试那边经常说:修改的样式没有生效,我都是让他们 ...

  5. html js清除缓存,js清除浏览器缓存的几种方法

    JS 缓存的问题一直都是我们又爱又恨的东西.也是我们比较头痛的问题, 一方面为了提高网站响应速度,减少服务器的负担,和节省带宽,将需要将静态资源缓存在客户端, 但是另一方面,当js 文件有改动的时候, ...

  6. ASP.NET系统退出(移除Session 、清除浏览器缓存)

    一.在退出时移除Session,首先在登录时要记录登录信息 Session["id"] = user.id.ToString();Session["name"] ...

  7. 前端更新需要清空浏览器缓存_js清除浏览器缓存的几种方法

    关于浏览器缓存 浏览器缓存,有时候我们需要他,因为他可以提高网站性能和浏览器速度,提高网站性能.但是有时候我们又不得不清除缓存,因为缓存可能误事,出现一些错误的数据.像股票类网站实时更新等,这样的网站 ...

  8. js清除浏览器缓存的几种方法(项目总结)

    以前很少关注这方面的问题,直达我们的技术经理找我们说要换框架,为什么换框架呢,因为缓存的问题,原来的项目是用版本号作为刷新的依据的.因为微信 公众号上有这样一个机制,使用版本好的话,有时做不到及时刷新 ...

  9. js清除浏览器缓存的几种方法

    2014年9月24日 4692次浏览 关于浏览器缓存 浏览器缓存,有时候我们需要他,因为他可以提高网站性能和浏览器速度,提高网站性能.但是有时候我们又不得不清除缓存,因为缓存可能误事,出现一些错误的数 ...

  10. 搜狗浏览器如何清除浏览器缓存--小白

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 也是今天 ...

最新文章

  1. python正则表达式修饰符_python正则表达式,看完这篇文章就够了...
  2. C++11之thread线程
  3. 阿里巴巴Java开发手册(开发规范)——编程规约笔记
  4. locky勒索样本分析
  5. 机器学习基础(四十三)—— kd 树( k 近邻法的实现)
  6. 第41天:匀速、缓动运动和图片无缝滚动
  7. 你是否需要安全运营中心?
  8. 求计算机技术在创新上的应用,计算机技术在企业中的应用
  9. android studio 快捷键修改
  10. 【五线谱】音高表示 ( 高音谱号 | C3 60 ~ B3 71 音高表示 | C4 72 音高表示 | C5 84 音高表示 )
  11. P1664 每日打卡心情好
  12. 华为防火墙的基本安全策略
  13. 物业养老,智慧养老新方式
  14. 按照题目打印菜单c语言,--单片机C语言编程实训
  15. 可以正常上网但ping 127.0.0.1或localhost出现请求超时的解决方法
  16. 你与绝美文章只差一个Typora(Mac版)
  17. 计算机有网络为何显示未连接网络,明明插了网线,电脑网络为什么显示未连接?...
  18. web前端-CSS Border(边框)-011
  19. 汇川AM401系列程序 汇川AM403程序,搭配汇川总线伺服,汇川IT7070系列触摸屏
  20. 华硕 TUF GAMING b360m 启动设备中看不到启动项 已解决

热门文章

  1. 360浏览器网页无法连接服务器,360浏览器打不开网页的解决方法教程
  2. 信息安全专业学习建议
  3. 关于使用迅雷下载百度云盘文件的教程
  4. 2016 server win 假死_Windows10出现假死的几种表现形式及对应解决方案
  5. 手机服务器连接视频文件夹吗,巧用手机自带功能向电脑传输视频 华为小米苹果均适用...
  6. bugzilla mysql_使用Mysql 5.6.11安装Bugzilla 4.2.5
  7. IPA安装的几种方法
  8. Python分解质因数
  9. 个人域名备案详细流程(图文并茂)
  10. C# AHP层次分析法计算特征向量(和法、根法、幂法)