Administrator
发布于 2024-06-25 / 9 阅读
0
0

Tomcat9 设置 index.html 不缓存

前言

接到客户反馈 手机 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 字样大小一列是否是缓存数据。


评论