Tomcat中图片请求已通过WebFilter但无法渲染问题求助
问题排查与解决方案
核心原因:图片资源存放位置错误
WEB-INF是Web应用的受保护目录,浏览器无法直接通过URL请求该目录下的资源。你的图片文件存放在WEB-INF/images目录下,但前端页面直接请求/images/xxx.png路径,导致服务器无法找到对应资源——即便过滤器放行该路径,也无法返回有效图片内容。
修复步骤
调整资源存放路径
将WEB-INF/images目录移动到webapp根目录下(与WEB-INF同级),让静态图片处于浏览器可直接访问的区域。修正页面图片引用
确保JSP页面中的图片引用带上上下文路径,避免因项目部署路径导致的错误:<img src="${pageContext.request.contextPath}/images/logout_button.png" />优化过滤器Session处理(可选)
过滤器中request.getSession()会自动创建新Session,对于静态资源请求完全没必要,建议修改为:HttpSession session = request.getSession(false); String email = session != null ? (String) session.getAttribute("email") : null; if (email == null) { request.getRequestDispatcher("/WEB-INF/view/login-page.jsp").forward(request, response); System.out.println(path + " попал в session == null"); } else { System.out.println(path + " попал в session != null"); filterChain.doFilter(request, response); }避免为静态资源请求创建不必要的Session。
验证方法
调整后重启应用,打开浏览器开发者工具的Network面板,查看图片请求的状态码是否为200,确认图片能正常加载。
内容的提问来源于stack exchange,提问作者Matvey Androsyuk
相关产品推荐
相关产品推荐

