某一天,客服反馈,说用户购买某一产品时,提交订单失落败,并发来用户的接口提示。
我一看,这不是昨天晚长进级之前的页面吗?昨天验证过没有问题呢。
为什么用户看到的是老的页面?该当是缓存的缘故原由。
回客服,让客户多刷新下页面,重新购买就可以了。

问题倒是办理了,但是客户体验非常不好,不能让老客户进来都重多次刷新页面吧!
有没有方法可以解jsp、html或者js的缓请安题呢?

序言

jsp加载js缓存原创|前端缓存激发的临盆问题息争决计划 Java

办理前端缓请安题,就须要页面加载的时候,不去读取浏览器的缓存,而是从Web做事器上重新获取页面。

方法的讲解Jsp、html缓存的办理Js、css缓存的办理

一、方法讲解

做事端方法

response.setHeader(\"大众Pragma\"大众,\"大众No-cache\公众); response.setHeader(\公众Cache-Control\"大众,\"大众no-cache\公众); response.setDateHeader(\公众Expires\"大众, -10);

Pragma头域用来包含实现特定的指令,最常用的是Pragma:no-cache。
在HTTP/1.1协议中,它的含义和Cache- Control:no-cache相同。

Cache -Control指定要乞降相应遵照的缓存机制,no-cache指示要求或相应不能缓存。

Expires 相应头包含日期/韶光, 即在此时候之后,相应过期,无效的日期,比如 -10, 代表着过去的日期,即该资源已经由期。

客户端方法

meta 是用来在HTML文档中仿照HTTP协议的相应头报文。
meta 标签用于网页的<head>与</head>中,meta 标签的用途很多。
meta 的属性有两种:name和http-equiv。
name属性紧张用于描述网页,对应于content(网页内容),以便于搜索引擎机器人查找、分类(目 前险些所有的搜索引擎都利用网上机器人自动查找meta值来给网页分类)。
这个中最主要的是description(站点在搜索引擎上的描述)和 keywords(分类关键词),以是该当给每页加一个meta值。
比较常用的有以下几个:

name 属性

1、<meta name=\"大众Generator\"大众 contect=\公众\公众>用以解释天生工具(如Microsoft FrontPage 4.0)等;

2、<meta name=\"大众KEYWords\"大众 contect=\"大众\公众>向搜索引擎解释你的网页的关键词;

3、<meta name=\公众DEscription\"大众 contect=\"大众\"大众>见告搜索引擎你的站点的紧张内容;

4、<meta name=\"大众Author\公众 contect=\"大众你的姓名\公众>见告搜索引擎你的站点的制作的作者;

5、<meta name=\公众Robots\"大众 contect=\公众all|none|index|noindex|follow|nofollow\公众>

http-equiv属性

1、<meta http-equiv=\公众Content-Type\公众 contect=\"大众text/html\"大众;charset=gb_2312-80\"大众> 和 <meta http-equiv=\"大众Content-Language\"大众 contect=\"大众zh-CN\"大众>用以解释主页制作所利用的笔墨以及措辞;又如英文是ISO-8859-1字符集,还有BIG5、utf-8、 shift-Jis、Euc、Koi8-2等字符集;

2、<meta http-equiv=\"大众Refresh\"大众 contect=\"大众n;url=http://yourlink\"大众>定时让网页在指定的韶光n内,跳转到页面http;//yourlink;

3、<meta http-equiv=\"大众Expires\"大众 contect=\"大众Mon,12 May 2001 00:20:00 GMT\"大众>可以用于设定网页的到期韶光,一旦过期则必须到做事器上重新调用。
须要把稳的是必须利用GMT韶光格式;

4、<meta http-equiv=\"大众Pragma\公众 contect=\"大众no-cache\"大众>是用于设定禁止浏览器从本地机的缓存中调阅页面内容,设定后一旦离开网页就无法从Cache中再调出;

5、<meta http-equiv=\"大众set-cookie\"大众 contect=\公众Mon,12 May 2001 00:20:00 GMT\"大众>cookie设定,如果网页过期,存盘的cookie将被删除。
须要把稳的也是必须利用GMT韶光格式;

6、<meta http-equiv=\"大众Pics-label\"大众 contect=\公众\"大众>网页等级评定,在IE的internet选项中有一项内容设置,可以防止浏览一些受限定的网站,而网站的限定级别便是通过meta属性来设置的;

7、<meta http-equiv=\"大众windows-Target\"大众 contect=\"大众_top\公众>逼迫页面在当前窗口中以独立页面显示,可以防止自己的网页被别人当作一个frame页调用;

8、<meta http-equiv=\"大众Page-Enter\公众 contect=\公众revealTrans(duration=10,transtion= 50)\"大众>和<meta http-equiv=\公众Page-Exit\"大众 contect=\"大众revealTrans(duration=20,transtion =6)\"大众>设定进入和离开页面时的分外效果,这个功能即FrontPage中的“格式/网页过渡”,不过所加的页面不能够是一个frame页面。

二、Jsp、html缓存的办理

前端页面处理方法

禁止客户端缓存要在<head>中加入类似如下内容:

<meta http-equiv=\"大众pragma\"大众 content=\"大众no-cache\"大众> <meta http-equiv=\"大众cache-control\"大众 content=\"大众no-cache\公众> <meta http-equiv=\"大众expires\公众 content=\"大众0\公众>

不设置超时时间

<%response.setHeader(\公众Cache-Control\"大众,\"大众no-store\公众);response.setHeader(\"大众Pragrma\"大众,\公众no-cache\"大众);response.setDateHeader(\"大众Expires\"大众,0);%>

设置超时时间10分钟

<%int minutes = 10; Date d = new Date(); String modDate = d.toGMTString(); String expDate = null; expDate = (new Date(d.getTime() + minutes 60000)).toGMTString(); response.setHeader(\"大众Last-Modified\"大众, modDate); response.setHeader(\"大众Expires\公众, expDate); response.setHeader(\"大众Cache-Control\"大众, \"大众public\公众); // HTTP/1.1 response.setHeader(\"大众Pragma\"大众, \公众Pragma\"大众); // HTTP/1.0 %>

后端处理方法

public class CacheJiejue extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(\"大众text/html;charset=utf-8\"大众); //指定该页面不缓存 response.setDateHeader(\公众Expires\公众,-1); //IE游览器支持的 //担保兼容性 response.setHeader(\公众Cache-Control\公众, \"大众no-cache\公众); response.setHeader(\公众Pragme\"大众, \"大众no-cache\"大众); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }

三、Js、css缓存的办理

Js或者css会被浏览器缓存下来,只有浏览看重启后才会删除,乃至重启都不会删除。
这样用户可能看到的便是缓存的页面效果。
会照成生产问题。
怎么办理呢?

方法一

在js或者css地址后面添加韶光戳或者随机数,这样每次要求都是新的地址,可以骗过浏览器的缓存,每次去做事器获取最新的代码
但是每次都去要求做事器获取新的代码,会占用带宽。

<link rel=\公众stylesheet\公众 href=\"大众/Resource/css/webapp_reset.css?s=<%=System.currentTimeMillis()%>\"大众/> <script type=\公众text/javascript\公众 src=\"大众/Resource/js/mobiscroll.custom-2.16.1.min.js?s=<%=Math.random()%>\公众 ></script>

方法二

可以添加版本号,每次修正的话在地址后面天生新的版本号,可以用系统韶光作为当前更新的版本号。

<script type=\"大众text/javascript\公众 src=\"大众/Resource/js/mobiscroll.custom-2.16.1.min.js?version=20190908\"大众 ></script>

搞定!

喜好的朋友可以关注下~