前言
接到客户反馈 手机 h5 页面白屏,本地各种测试复现不了,经过各种验证确认是浏览器缓存机制导致的问题。解决方法很简单,让客户清除浏览器缓存。
但是不止一个客户提出这种问题,客户沟通成本太高了,而且有些客户不愿意配合。测试还遇到个别机型的手机微信死活清除不了缓存(可能是清除姿势不对),因此我们就考虑如何让浏览器不缓存页面。
经过一番资料的查找,我们了解到 服务端响应头设置 no-cache、no-store 即可让浏览器不缓存。下面介绍具体的实现。
一、自定义拦截器 jar 包
请参考本站文章 —— java 打 jar 包及引用,里面介绍了创建项目、编写程序到最后打 jar 包的过程。这里只贴主要的代码:
package static_filter;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 自定义拦截器,针对 index.html 增加不缓存的响应头
*
* @author gavin
* date:2024/6/25
*/
public class StaticFilter implements Filter
{
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain)
throws IOException, ServletException
{
HttpServletRequest request = (HttpServletRequest)servletRequest;
HttpServletResponse response = (HttpServletResponse)servletResponse;
String url = request.getRequestURI();
if (url.indexOf("index.html") > 0) {
response.addHeader("cache-control", "no-cache");
response.addHeader("cache-control", "no-store");
}
chain.doFilter(request, response);
}
}
二、上传 jar,配置拦截器
jar 上传到 tomcat/lib 目录下,编写 tomcat/conf/web.xml 加入自定义拦截器:
记得先备份 web.xml,任何配置修改前应先备份,cp web.xml web.xml_bak
filter 放的位置,可以搜索文件 filter 关键字,和内置的其他 filter 并列放即可。
<filter>
<filter-name>staticFilter</filter-name>
<filter-class>static_filter.StaticFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>staticFilter</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
三、验证
重启服务器,访问 http://localhost:8080/index.html
(随便弄一个测试页),f5 刷新页面,f12 观察 响应头是否有 no-cache 字样 或 大小一列是否是缓存数据。