
本文详解 tomcat 应用中静态资源(如 pdf)的正确存放路径与 html 下载链接写法,解决因路径错误导致的“failed – no file”下载失败问题。
在 Tomcat 中,Web 应用的资源访问遵循严格的目录结构规则。常见误区是将文件(如 brochure.pdf)直接放在 webapps/ 根目录下(即与 ROOT 同级),但此时该文件不属于任何 Web 应用上下文,无法被 Tomcat 的 Servlet 容器识别和提供服务——这正是点击下载时出现 "Failed – No file" 的根本原因。
✅ 正确做法:将静态文件置于对应 Web 应用的根目录内(即与 JSP 页面同级),而非 webapps/ 顶层。
以默认应用 ROOT 为例:
- ✅ 正确路径:webapps/ROOT/brochure.pdf
- ❌ 错误路径:webapps/brochure.pdf(Tomcat 不会映射此路径)或 webapps/ROOT/WEB-INF/brochure.pdf(WEB-INF 下资源受保护,禁止直接访问)
部署后,在 JSP 中应使用相对于 Web 应用上下文的路径引用该文件。推荐写法如下:
? 说明: ${pageContext.request.contextPath} 动态输出当前应用上下文路径(如 / 或 /myapp),确保链接在不同部署环境下均有效; download 属性触发浏览器下载行为(注意:部分旧版浏览器或跨域场景下可能失效,需配合后端响应头 Content-Disposition: attachment 增强兼容性); download="UserGuide.pdf" 可自定义保存文件名,提升用户体验。
? 补充注意事项:
- 若 PDF 位于子目录(如 webapps/ROOT/docs/brochure.pdf),链接应为 ${pageContext.request.contextPath}/docs/brochure.pdf;
- 避免使用 ../ 或绝对服务器路径(如 file:///),这些在 Web 环境中无效且不安全;
- 修改文件后,建议清除浏览器缓存或强制刷新(Ctrl+F5),防止因缓存导致旧路径残留;
- 如仍无法下载,请检查 Tomcat 日志(logs/catalina.out)是否报 404 错误,并确认 PDF 文件权限可读、无中文或特殊字符命名。
总结:静态资源必须置于 Web 应用可服务目录内,路径须匹配应用上下文,而非物理服务器路径。 遵循此原则,即可稳定实现 PDF 等文件的网页直链下载。










