Spring Boot 1.5.3 版本图片无法显示问题求助
看起来你已经折腾了好一阵,别着急,我们一步步来排查问题:
1. 先确认静态资源的存放位置是否符合Spring Boot规范
Spring Boot 1.5版本默认会自动加载以下目录中的静态资源:
classpath:/META-INF/resources/classpath:/resources/classpath:/static/classpath:/public/
如果你的图片目前放在src/main/webapp/images目录下,这个路径在jar包部署时可能不会被Spring Boot自动识别(webapp目录主要用于war包部署场景)。最简单的解决办法是把images目录移到src/main/resources/static/下,这样你HTML里的<img src="images/DataServicesAdminAppLogo.png"...>就能直接访问到资源了。
2. 如果坚持使用webapp目录,需手动配置静态资源映射
从你提供的ApplicationContext.xml来看,你已经引入了mvc命名空间,但缺少静态资源的映射配置。你需要在配置文件中添加以下内容:
<mvc:resources mapping="/images/**" location="/images/"/>
这段配置会告诉Spring MVC,所有路径匹配/images/**的请求,都去webapp/images目录下查找对应的资源。
另外要注意:如果是war包部署,确保webapp目录在打包时被正确包含到war文件中;如果是jar包部署,建议还是用resources/static目录更稳妥。
3. 检查HTML中的路径是否包含上下文路径
如果你的应用部署时带有上下文路径(比如访问地址是http://localhost:8080/admin),那么直接写images/xxx.png会导致浏览器从当前页面路径下去找图片,可能出现404。这种情况下,推荐用JSTL的<c:url>标签来生成绝对路径:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> ... <img src="<c:url value='/images/DataServicesAdminAppLogo.png'/>" width="40" height="40" class="d-inline-block align-top" alt="" hspace="10"/>
这个标签会自动帮你加上应用的上下文路径,确保资源路径正确。
4. 结合网络检查器排查具体问题
从你提供的网络检查器截图,你可以重点看:
- 请求图片的状态码:如果是404,说明路径匹配错误;如果是403,可能是权限拦截问题;如果是200但图片不显示,可能是图片文件损坏或者MIME类型配置错误。
- 请求的实际URL:对比一下浏览器请求的URL和你预期的资源路径是否一致,这能快速定位路径问题。
5. 确认Spring Boot自动配置未被覆盖
如果你的启动类上使用了@ImportResource引入自定义的ApplicationContext.xml,同时又排除了WebMvcAutoConfiguration,那Spring Boot的默认静态资源配置就会失效,你需要手动配置完整的MVC相关设置,包括静态资源映射、视图解析等。如果没有排除自动配置,那前面的步骤应该能解决问题。
先试试把图片移到static目录,或者添加静态资源映射配置,应该就能解决你的问题了!
内容的提问来源于stack exchange,提问作者Mike

