在 Tomcat 中通过 web.xml 配置缓存控制响应头

你可以在你的 Web 应用的 WEB-INF/web.xml 文件中,通过配置过滤器(Filter)来给特定资源(比如 index.html)添加缓存控制的响应头。

示例:配置一个简单的缓存控制过滤器给 index.html

1. 编写一个过滤器类

java 复制代码
java复制
package com.example.filter;

import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class NoCacheFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // 初始化(可不实现)
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        if(response instanceof HttpServletResponse){
            HttpServletResponse httpResp = (HttpServletResponse) response;
            httpResp.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1
            httpResp.setHeader("Pragma", "no-cache"); // HTTP 1.0
            httpResp.setDateHeader("Expires", 0); // Proxies
        }
        chain.doFilter(request, response);
    }

    @Override
    public void destroy() {
        // 销毁(可不实现)
    }
}

2. 在 web.xml 中声明并映射该过滤器

xml 复制代码
xml复制
<filter>
    <filter-name>noCacheFilter</filter-name>
    <filter-class>com.example.filter.NoCacheFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>noCacheFilter</filter-name>
    <!-- 只拦截index.html -->
    <url-pattern>/index.html</url-pattern>
</filter-mapping>

这样,当访问 index.html 时,Tomcat 返回的响应头就带上了禁止缓存的指令,浏览器就会每次重新请求,不会触发 304。

相关推荐
野生技术架构师6 分钟前
Spring Boot 定时任务与 xxl-job 灵活切换方案
java·spring boot·后端
寒士obj2 小时前
SpringBoot中的条件注解
java·spring boot·后端
G探险者2 小时前
循环中的阻塞风险与异步线程解法
后端
易元2 小时前
模式组合应用-桥接模式(二)
后端
三婶儿2 小时前
在没有客户端的客户环境下,如何用 Python 一键执行 MySQL 与达梦数据库 SQL
运维·后端·python
G探险者4 小时前
Java 线程相关的三个常见接口、类
后端
学历真的很重要4 小时前
Eino 开源框架全景解析 - 以“大模型应用的搭积木指南”方式理解(一)
后端·语言模型·面试·golang·ai编程·eino
1点东西4 小时前
新来的同事问我当进程/机器突然停止时,finally 到底会不会执行?
java·后端·程序员
AAA修煤气灶刘哥4 小时前
后端仔狂喜!手把手教你用 Java 拿捏华为云 IoTDA,设备上报数据 so easy
后端·物联网·华为
G探险者4 小时前
如何在批量创建 `DefaultMessageListenerContainer` 时避免阻塞问题
后端