当前位置: 首页 > news >正文

JSP 项目静态资源后拼接版本号/时间戳,免刷新

因为最近在做之前的项目,缺少这部分内容,导致改了js或者css文件后,去浏览器不能实时看到效果;

拼接时间戳

因为在本地环境,需要频繁改代码,去刷新,所以解决方案是拼接时间戳。
因为自己在做的项目中,每个jsp 文件都引入了一个公共的jsp,所以以下代码就贴在了公共的jsp里,涉及到每个页面在局部去在对应的静态资源后拼接;

<% // 禁用缓存 response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate, max-age=0"); response.setHeader("Pragma", "no-cache"); response.setDateHeader("Expires", 0); response.setDateHeader("Last-Modified", System.currentTimeMillis()); // 强制更新最后修改时间 // 开发环境测试:时间戳作为版本号(每次刷新都生成新值,强制刷新所有静态资源) long timestamp = System.currentTimeMillis(); request.setAttribute("staticVersion", timestamp); %>

分两个层面解读:

① HTTP 响应头 —— 禁止浏览器缓存 JSP 页面本身

响应头 作用

Cache-Control: no-cache... 告知浏览器和代理:此页面不可缓存

Pragma: no-cache 兼容 HTTP/1.0 的老浏览器

Expires: 0 设置过期时间为过去,立即失效

Last-Modified: 当前时间 每次都是"最新",强制重新请求

② staticVersion 时间戳 —— 控制静态资源缓存

long timestamp = System.currentTimeMillis(); // 如:1717912345678
request.setAttribute("staticVersion", timestamp);

该值存入 request 域,供后续 EL 表达式 ${staticVersion} 取用,拼接到所有静态资源 URL 后面:

<script src=".../jquery-1.8.3.js?v=1717912345678"></script>
<link href=".../style.css?v=1717912345678" ...>

浏览器以完整 URL(含参数) 作为缓存 key。每次刷新页面,System.currentTimeMillis() 都会生成新的毫秒时间戳,URL 就变了,浏览器认为是新资源,强制重新下载。

拼接版本号

每次刷新所有 JS/CSS 都重新下载,对生产环境性能影响较大,建议生产改为固定版本号;

<% // 静态资源版本号 —— 发版时只需修改此处一个值! final String staticVersion = "1.0.0"; request.setAttribute("staticVersion", staticVersion); // 禁用JSP页面本身的缓存(静态资源缓存由版本号 ?v= 控制) response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); response.setHeader("Pragma", "no-cache"); response.setDateHeader("Expires", 0); %>


http://www.rkmt.cn/news/1515728.html

相关文章:

  • 卖家福音:一键生成详情页、主图、模特穿戴图,省时80%
  • DPDK ACL分类器设计深度解析:从148Mpps跌到72Mpps,一次ACL规则膨胀引发的性能雪崩
  • 深度解析NCMconverter:网易云音乐加密格式破解与音频转换技术实现
  • 为什么程序员都在用 Claude 写代码?实测 Debug 能力与大模型选型攻略
  • 告别信号玄学:手把手教你用PCIe 4.0的Lane Margining功能实测信号余量
  • 保姆级教程:用RTKLIB的rtknavi模块,5分钟搞定实时PPP定位(附武汉大学/上海天文台Ntrip账号申请)
  • 利用深度学习目标检测框架yolov8YOLO8训练使用草莓成熟度 数据集
  • 保姆级教程:用GD32F470的Timer1实现精准1ms定时(基于200MHz系统时钟)
  • A2B音频系统设计实战:如何用SigmaStudio为你的AD242x功放/MIC配置TDM与I2S格式?
  • erm:去除语音语气词的本地工具,解决手动删除痛苦!
  • VS2010一键编译的eXosip2 4.0.0 + osip2 4.0.0完整工程包(含Win32/MFC支持)
  • 2026河北油管厂家排行揭秘,这样选才不踩坑
  • 告别卡顿!在Uni-app里用海康H5Player播放WS视频流,保姆级接入教程(含RenderJS避坑)
  • 六盘水余生黄金回收实测 2026卖金价格指南 - 余生黄金回收
  • 2026年你必须知道的5种DeFi智能合约漏洞——从100个真实案例看资产安全
  • 如何让微信网页版重新可用:wechat-need-web技术方案深度解析
  • WinForm下可交互SVG图形控件:支持标注定位、元素锁定与操作回退
  • 从Arduino到ESP32:手把手教你调试I2C通信,搞定‘地址无响应’和波形毛刺
  • 2026年江阴装修公司口碑观察:从设计到落地,这些企业值得关注(含无锡/苏州/张家港) - 优质品牌商家
  • 中国多时期生态系统类型空间分布数据(1980–2020年)|7大生态系统分类
  • 从开箱到跑通Demo:EdgeBoard FZ5赛事卡上手实录(含系统烧录避坑与资源包整理)
  • PoP(Package on Package)封装技术探讨
  • 2026南通全媒体运营TOP榜单:短视频策划拍摄/账号运营/话题打造/达人联动/信息流投放/微信公众号及视频号内容运营与活动策划一站式优选 - 品牌发掘
  • 2026年C语言找工作难吗?普通人还能找到好工作吗?
  • 别再找旧脚本了!MMdetection 3.X 版本官方工具一键生成PR曲线图(附完整配置流程)
  • TMS320F28335四层小板:6×8cm带USB供电、JTAG下载、复位键和全引脚标注
  • 六盘水珍宝黄金回收测评 2026买金避坑指南 - 余生黄金回收
  • 避开回收套路荆州六大黄金门店测评 - 余生黄金回收
  • 寄行李大件什么物流最省钱?用“寄半折”比价立省一半 - 快递物流资讯
  • Logisim 2.7.1 手把手:从零搭建一个支持13种运算的32位MIPS ALU(附完整电路图)